Index: src/runtime.cc |
diff --git a/src/runtime.cc b/src/runtime.cc |
index 881020c5af8a54902d1e80e75d24e4cfb39d1b7e..28506dde49a11cd6aa9d6c91ab5ce21e22301f64 100644 |
--- a/src/runtime.cc |
+++ b/src/runtime.cc |
@@ -917,6 +917,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()); |
@@ -956,9 +962,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; |
@@ -14809,6 +14817,11 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_InternalArrayConstructor) { |
} |
+RUNTIME_FUNCTION(MaybeObject*, Runtime_MaxSmi) { |
+ return Smi::FromInt(Smi::kMaxValue); |
+} |
+ |
+ |
// ---------------------------------------------------------------------------- |
// Implementation of Runtime |