From: yangguo@chromium.org Date: Thu, 11 Sep 2014 12:16:33 +0000 (+0000) Subject: Expect access check in JSObject::DefineAccessor. X-Git-Tag: upstream/4.7.83~6979 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9dcf34033bc0e805379bc3c6bdbc3ed01ccc6306;p=platform%2Fupstream%2Fv8.git Expect access check in JSObject::DefineAccessor. R=ulan@chromium.org, verwaest@chromium.org BUG=chromium:411793 LOG=N Review URL: https://codereview.chromium.org/559403002 git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23874 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/objects.cc b/src/objects.cc index 4459a5b..f73d33f 100644 --- a/src/objects.cc +++ b/src/objects.cc @@ -6147,7 +6147,10 @@ MaybeHandle JSObject::DefineAccessor(Handle object, // At least one of the accessors needs to be a new value. DCHECK(!getter->IsNull() || !setter->IsNull()); LookupIterator it(object, name, LookupIterator::OWN_SKIP_INTERCEPTOR); - CHECK_NE(LookupIterator::ACCESS_CHECK, it.state()); + if (it.state() == LookupIterator::ACCESS_CHECK) { + // We already did an access check before. We do have access. + it.Next(); + } if (!getter->IsNull()) { it.TransitionToAccessorProperty(ACCESSOR_GETTER, getter, attributes); } diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc index 75c5b8e..f3c0580 100644 --- a/test/cctest/test-api.cc +++ b/test/cctest/test-api.cc @@ -23035,3 +23035,21 @@ TEST(GetHiddenPropertyTableAfterAccessCheck) { obj->SetHiddenValue(v8_str("hidden key 2"), v8_str("hidden value 2")); } + + +TEST(Regress411793) { + v8::Isolate* isolate = CcTest::isolate(); + v8::HandleScope handle_scope(isolate); + v8::Handle object_template = + v8::ObjectTemplate::New(isolate); + object_template->SetAccessCheckCallbacks(NamedAccessCounter, + IndexedAccessCounter); + + v8::Handle context = Context::New(isolate); + v8::Context::Scope context_scope(context); + + context->Global()->Set(v8_str("o"), object_template->NewInstance()); + CompileRun( + "Object.defineProperty(o, 'key', " + " { get: function() {}, set: function() {} });"); +}