Chromium Code Reviews| Index: src/d8.cc | 
| diff --git a/src/d8.cc b/src/d8.cc | 
| index aa18afd7a2d67434046e0a8ab618ba2332122ace..28c209b87747bf97c9a617daff4e89a70e14c13a 100644 | 
| --- a/src/d8.cc | 
| +++ b/src/d8.cc | 
| @@ -338,8 +338,8 @@ Handle<Value> Shell::CreateExternalArray(const Arguments& args, | 
| } | 
| bool first_arg_is_array_buffer = | 
| args[0]->IsObject() && | 
| - args[0]->ToObject()->GetHiddenValue( | 
| - String::New(kArrayBufferMarkerPropName))->IsTrue(); | 
| + !args[0]->ToObject()->GetHiddenValue( | 
| + String::New(kArrayBufferMarkerPropName)).IsEmpty(); | 
| // Currently, only the following constructors are supported: | 
| // ArrayBuffer(unsigned long length) | 
| // TypedArray(unsigned long length) | 
| @@ -373,6 +373,10 @@ Handle<Value> Shell::CreateExternalArray(const Arguments& args, | 
| } else { | 
| byteOffset = convertToUint(args[1], &try_catch); | 
| if (try_catch.HasCaught()) return try_catch.Exception(); | 
| + if (byteOffset > byteLength) { | 
| + return ThrowException( | 
| + String::New("byteOffset out of bounds")); | 
| 
 
Michael Starzinger
2012/05/30 14:25:08
That should fit into one line.
 
 | 
| + } | 
| if (byteOffset % element_size != 0) { | 
| return ThrowException( | 
| String::New("byteOffset must be multiple of element_size")); | 
| @@ -391,8 +395,7 @@ Handle<Value> Shell::CreateExternalArray(const Arguments& args, | 
| } | 
| if (byteOffset + length * element_size > byteLength) { | 
| - return ThrowException( | 
| - String::New("byteOffset or length out of bounds")); | 
| + return ThrowException(String::New("length out of bounds")); | 
| } | 
| byteLength = byteOffset + length * element_size; | 
| @@ -454,7 +457,7 @@ void Shell::ExternalArrayWeakCallback(Persistent<Value> object, void* data) { | 
| Handle<String> prop_name = String::New(kArrayBufferReferencePropName); | 
| Handle<Object> converted_object = object->ToObject(); | 
| Local<Value> prop_value = converted_object->GetHiddenValue(prop_name); | 
| - if (data != NULL && !prop_value->IsObject()) { | 
| + if (data != NULL && prop_value.IsEmpty()) { | 
| data = reinterpret_cast<size_t*>(data) - kExternalArrayAllocationHeaderSize; | 
| V8::AdjustAmountOfExternalAllocatedMemory( | 
| -static_cast<int>(*reinterpret_cast<size_t*>(data))); |