| Index: src/runtime.cc
|
| diff --git a/src/runtime.cc b/src/runtime.cc
|
| index c05597a48b6ac05b04773e25e5a9074080fb6592..a6f2f2d4f7f0888cd3a8d5e990b6efc0816f5ba7 100644
|
| --- a/src/runtime.cc
|
| +++ b/src/runtime.cc
|
| @@ -909,6 +909,12 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_TypedArrayInitialize) {
|
| ASSERT(byte_length % element_size == 0);
|
| size_t length = byte_length / element_size;
|
|
|
| + if (length > static_cast<unsigned>(Smi::kMaxValue)) {
|
| + return isolate->Throw(*isolate->factory()->
|
| + NewRangeError("invalid_typed_array_length",
|
| + HandleVector<Object>(NULL, 0)));
|
| + }
|
| +
|
| Handle<Object> length_obj = isolate->factory()->NewNumberFromSize(length);
|
| holder->set_length(*length_obj);
|
| holder->set_weak_next(buffer->weak_first_view());
|
| @@ -948,9 +954,11 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_TypedArrayInitializeFromArrayLike) {
|
|
|
| Handle<JSArrayBuffer> buffer = isolate->factory()->NewJSArrayBuffer();
|
| size_t length = NumberToSize(isolate, *length_obj);
|
| - if (length > (kMaxInt / element_size)) {
|
| +
|
| + if ((length > static_cast<unsigned>(Smi::kMaxValue)) ||
|
| + (length > (kMaxInt / element_size))) {
|
| return isolate->Throw(*isolate->factory()->
|
| - NewRangeError("invalid_array_buffer_length",
|
| + NewRangeError("invalid_typed_array_length",
|
| HandleVector<Object>(NULL, 0)));
|
| }
|
| size_t byte_length = length * element_size;
|
| @@ -14412,6 +14420,11 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_InternalArrayConstructor) {
|
| }
|
|
|
|
|
| +RUNTIME_FUNCTION(MaybeObject*, Runtime_MaxSmi) {
|
| + return Smi::FromInt(Smi::kMaxValue);
|
| +}
|
| +
|
| +
|
| // ----------------------------------------------------------------------------
|
| // Implementation of Runtime
|
|
|
|
|