diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/objects.cc | 25 | ||||
-rw-r--r-- | src/version.cc | 2 |
2 files changed, 18 insertions, 9 deletions
diff --git a/src/objects.cc b/src/objects.cc index 92bce62d4..1d3b022c7 100644 --- a/src/objects.cc +++ b/src/objects.cc @@ -6909,20 +6909,21 @@ MaybeHandle<Object> JSObject::GetAccessor(Handle<JSObject> object, // interceptor calls. AssertNoContextChange ncc(isolate); - // Check access rights if needed. - if (object->IsAccessCheckNeeded() && - !isolate->MayNamedAccess(object, name, v8::ACCESS_HAS)) { - isolate->ReportFailedAccessCheck(object, v8::ACCESS_HAS); - RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object); - return isolate->factory()->undefined_value(); - } - // Make the lookup and include prototypes. uint32_t index = 0; if (name->AsArrayIndex(&index)) { for (Handle<Object> obj = object; !obj->IsNull(); obj = handle(JSReceiver::cast(*obj)->GetPrototype(), isolate)) { + if (obj->IsAccessCheckNeeded() && + !isolate->MayNamedAccess(Handle<JSObject>::cast(obj), name, + v8::ACCESS_HAS)) { + isolate->ReportFailedAccessCheck(Handle<JSObject>::cast(obj), + v8::ACCESS_HAS); + RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object); + return isolate->factory()->undefined_value(); + } + if (obj->IsJSObject() && JSObject::cast(*obj)->HasDictionaryElements()) { JSObject* js_object = JSObject::cast(*obj); SeededNumberDictionary* dictionary = js_object->element_dictionary(); @@ -6941,6 +6942,14 @@ MaybeHandle<Object> JSObject::GetAccessor(Handle<JSObject> object, for (Handle<Object> obj = object; !obj->IsNull(); obj = handle(JSReceiver::cast(*obj)->GetPrototype(), isolate)) { + if (obj->IsAccessCheckNeeded() && + !isolate->MayNamedAccess(Handle<JSObject>::cast(obj), name, + v8::ACCESS_HAS)) { + isolate->ReportFailedAccessCheck(Handle<JSObject>::cast(obj), + v8::ACCESS_HAS); + RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object); + return isolate->factory()->undefined_value(); + } LookupResult result(isolate); JSReceiver::cast(*obj)->LookupOwn(name, &result); if (result.IsFound()) { diff --git a/src/version.cc b/src/version.cc index d6c513555..da8e38614 100644 --- a/src/version.cc +++ b/src/version.cc @@ -35,7 +35,7 @@ #define MAJOR_VERSION 3 #define MINOR_VERSION 27 #define BUILD_NUMBER 34 -#define PATCH_LEVEL 14 +#define PATCH_LEVEL 15 // Use 1 for candidates and 0 otherwise. // (Boolean macro values are not supported by all preprocessors.) #define IS_CANDIDATE_VERSION 0 |