Commit 42180759 authored by Jakob Kummerow's avatar Jakob Kummerow Committed by Commit Bot

[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/1356902Reviewed-by: 's avatarBill Budge <bbudge@chromium.org>
Commit-Queue: Jakob Kummerow <jkummerow@chromium.org>
Cr-Commit-Position: refs/heads/master@{#57984}
parent 9d511664
......@@ -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;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment