[ubsan] Fix complaint in NewArray when size == 0
While strictly speaking it is legal (though useless) to dynamically create zero-length arrays with "new T[0]", UBSan does not like it, so this CL avoids doing it. It fixes the error: ../../src/allocation.h:41:34: runtime error: constructor call on address 0x... with insufficient space for an object of type 'unsigned char' Bug: v8:3770 Change-Id: I5017767c59df0d8928f7493f92d2d04519083964 Reviewed-on: https://chromium-review.googlesource.com/c/1356902 Reviewed-by: Bill Budge <bbudge@chromium.org> Commit-Queue: Jakob Kummerow <jkummerow@chromium.org> Cr-Commit-Position: refs/heads/master@{#57984}
This commit is contained in:
parent
9d51166419
commit
421807599d
@ -15,6 +15,9 @@ void CallInterfaceDescriptorData::InitializePlatformSpecific(
|
||||
|
||||
register_param_count_ = register_parameter_count;
|
||||
|
||||
// UBSan doesn't like creating zero-length arrays.
|
||||
if (register_parameter_count == 0) return;
|
||||
|
||||
// InterfaceDescriptor owns a copy of the registers array.
|
||||
register_params_ = NewArray<Register>(register_parameter_count, no_reg);
|
||||
for (int i = 0; i < register_parameter_count; i++) {
|
||||
|
@ -145,7 +145,8 @@ class V8_EXPORT_PRIVATE CallInterfaceDescriptorData {
|
||||
private:
|
||||
bool IsInitializedPlatformSpecific() const {
|
||||
const bool initialized =
|
||||
register_param_count_ >= 0 && register_params_ != nullptr;
|
||||
(register_param_count_ == 0 && register_params_ == nullptr) ||
|
||||
(register_param_count_ > 0 && register_params_ != nullptr);
|
||||
// Platform-specific initialization happens before platform-independent.
|
||||
return initialized;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user