Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index 72fecad05a24cf6322dbde0c8a50504822d12626..c119e3535afdf2fa36f6bfb3ea2c119e5c2b947f 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -2976,7 +2976,7 @@ MaybeHandle<Object> JSObject::SetElementWithCallbackSetterInPrototypes( |
Handle<Object> value, |
bool* found, |
StrictMode strict_mode) { |
- Isolate *isolate = object->GetIsolate(); |
+ Isolate* isolate = object->GetIsolate(); |
for (PrototypeIterator iter(isolate, object); !iter.IsAtEnd(); |
iter.Advance()) { |
if (PrototypeIterator::GetCurrent(iter)->IsJSProxy()) { |
@@ -2987,9 +2987,20 @@ MaybeHandle<Object> JSObject::SetElementWithCallbackSetterInPrototypes( |
} |
Handle<JSObject> js_proto = |
Handle<JSObject>::cast(PrototypeIterator::GetCurrent(iter)); |
+ |
+ if (js_proto->IsAccessCheckNeeded()) { |
+ if (!isolate->MayIndexedAccess(js_proto, index, v8::ACCESS_SET)) { |
+ *found = true; |
+ isolate->ReportFailedAccessCheck(js_proto, v8::ACCESS_SET); |
+ RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object); |
+ return MaybeHandle<Object>(); |
+ } |
+ } |
+ |
if (!js_proto->HasDictionaryElements()) { |
continue; |
} |
+ |
Handle<SeededNumberDictionary> dictionary(js_proto->element_dictionary()); |
int entry = dictionary->FindEntry(index); |
if (entry != SeededNumberDictionary::kNotFound) { |