| Index: src/elements.cc
|
| diff --git a/src/elements.cc b/src/elements.cc
|
| index 12bc26506a46cad26257fff0eba531707fa81166..096e5a13fb44e956d6a2f8c0c87d8e350def908b 100644
|
| --- a/src/elements.cc
|
| +++ b/src/elements.cc
|
| @@ -2815,8 +2815,17 @@ class TypedElementsAccessor
|
| Handle<JSObject> receiver,
|
| Handle<Object> value,
|
| uint32_t start_from, uint32_t length) {
|
| - DCHECK(JSObject::PrototypeHasNoElements(isolate, *receiver));
|
| DisallowHeapAllocation no_gc;
|
| + DCHECK(JSObject::PrototypeHasNoElements(isolate, *receiver));
|
| +
|
| + // Path should only be reached for JSTypedArrays
|
| + Handle<JSTypedArray> array = Handle<JSTypedArray>::cast(receiver);
|
| + Handle<JSArrayBuffer> buffer = array->GetBuffer();
|
| + if (V8_UNLIKELY(buffer->was_neutered())) {
|
| + // If buffer was neutered, all accesses yield `undefined`, so return
|
| + // true if searching for undefined, otherwise false.
|
| + return Just(value->IsUndefined(isolate) && length > start_from);
|
| + }
|
|
|
| BackingStore* elements = BackingStore::cast(receiver->elements());
|
| if (value->IsUndefined(isolate) &&
|
|
|