| 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 | 
|  | 
|  |