diff --git a/src/runtime.cc b/src/runtime.cc index c508b4a644..b98ba40fdb 100644 --- a/src/runtime.cc +++ b/src/runtime.cc @@ -5193,6 +5193,7 @@ RUNTIME_FUNCTION(Runtime_DefineOrRedefineAccessorProperty) { PropertyAttributes attr = static_cast(unchecked); bool fast = obj->HasFastProperties(); + // DefineAccessor checks access rights. JSObject::DefineAccessor(obj, name, getter, setter, attr); RETURN_FAILURE_IF_SCHEDULED_EXCEPTION(isolate); if (fast) JSObject::TransformToFastProperties(obj, 0); @@ -5216,6 +5217,12 @@ RUNTIME_FUNCTION(Runtime_DefineOrRedefineDataProperty) { RUNTIME_ASSERT((unchecked & ~(READ_ONLY | DONT_ENUM | DONT_DELETE)) == 0); PropertyAttributes attr = static_cast(unchecked); + // Check access rights if needed. + if (js_object->IsAccessCheckNeeded() && + !isolate->MayNamedAccess(js_object, name, v8::ACCESS_SET)) { + return isolate->heap()->undefined_value(); + } + LookupResult lookup(isolate); js_object->LocalLookupRealNamedProperty(*name, &lookup);