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