[dart2wasm] Check array length in _allocateData New passing tests: - co19/LibTest/collection/ListBase/ListBase_class_A01_t01 - co19/LibTest/collection/ListMixin/ListMixin_class_A01_t01 - co19/LibTest/core/List/List_all_t01 Change-Id: I5ee455714e82c4f70df42037db11414832e4f9fa Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/284160 Commit-Queue: Ömer Ağacan <omersa@google.com> Reviewed-by: Aske Simon Christensen <askesc@google.com>
diff --git a/sdk/lib/_internal/wasm/lib/growable_list.dart b/sdk/lib/_internal/wasm/lib/growable_list.dart index a9e458d..43b0825 100644 --- a/sdk/lib/_internal/wasm/lib/growable_list.dart +++ b/sdk/lib/_internal/wasm/lib/growable_list.dart
@@ -239,6 +239,9 @@ WasmObjectArray<Object?>(0); static WasmObjectArray<Object?> _allocateData(int capacity) { + if (capacity < 0) { + throw new RangeError.range(capacity, 0, _maxWasmArrayLength); + } if (capacity == 0) { // Use shared empty list as backing. return _emptyData;
diff --git a/sdk/lib/_internal/wasm/lib/list.dart b/sdk/lib/_internal/wasm/lib/list.dart index 081bd49..8922353 100644 --- a/sdk/lib/_internal/wasm/lib/list.dart +++ b/sdk/lib/_internal/wasm/lib/list.dart
@@ -4,6 +4,8 @@ part of "core_patch.dart"; +const int _maxWasmArrayLength = 2147483647; // max i32 + @pragma("wasm:entry-point") abstract class _ListBase<E> extends ListBase<E> { @pragma("wasm:entry-point") @@ -13,8 +15,8 @@ _ListBase(int length, int capacity) : _length = length, - _data = WasmObjectArray<Object?>(RangeError.checkValueInInterval( - capacity, 0, 2147483647)); // max i32 + _data = WasmObjectArray<Object?>( + RangeError.checkValueInInterval(capacity, 0, _maxWasmArrayLength)); _ListBase._withData(this._length, this._data);