From f9cf6a219e9a9d21d83d315009d535a61d4ab4b1 Mon Sep 17 00:00:00 2001 From: Jochen Eisinger Date: Thu, 28 May 2015 14:25:24 +0200 Subject: [PATCH] Version 4.4.63.3 (cherry-pick) Merged 7b24219346fbfdf2ca795ab6cb370676bf148cb9 Fix lookup iterator checks in GetRealNamedProperty* methods BUG=v8:4143 LOG=N R=hablich@chromium.org TBR=hablich@chromium.org Review URL: https://codereview.chromium.org/1161953002 Cr-Commit-Position: refs/branch-heads/4.4@{#7} Cr-Branched-From: 2e4c5505e85d94b520e853dda3f0cc3f2769e5f0-refs/heads/4.4.63@{#1} Cr-Branched-From: 0208b8e3a1d7ce393308866386ac8d94f85faa05-refs/heads/master@{#28333} --- src/api.cc | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/api.cc b/src/api.cc index 4f16120df33..daaaf765e23 100644 --- a/src/api.cc +++ b/src/api.cc @@ -4034,10 +4034,10 @@ MaybeLocal v8::Object::GetRealNamedPropertyInPrototypeChain( auto proto = i::PrototypeIterator::GetCurrent(iter); i::LookupIterator it(self, key_obj, i::Handle::cast(proto), i::LookupIterator::PROTOTYPE_CHAIN_SKIP_INTERCEPTOR); - if (!it.IsFound()) return MaybeLocal(); Local result; has_pending_exception = !ToLocal(i::Object::GetProperty(&it), &result); RETURN_ON_FAILED_EXECUTION(Value); + if (!it.IsFound()) return MaybeLocal(); RETURN_ESCAPED(result); } @@ -4063,9 +4063,9 @@ v8::Object::GetRealNamedPropertyAttributesInPrototypeChain( auto proto = i::PrototypeIterator::GetCurrent(iter); i::LookupIterator it(self, key_obj, i::Handle::cast(proto), i::LookupIterator::PROTOTYPE_CHAIN_SKIP_INTERCEPTOR); - if (!it.IsFound()) return Nothing(); auto result = i::JSReceiver::GetPropertyAttributes(&it); RETURN_ON_FAILED_EXECUTION_PRIMITIVE(PropertyAttribute); + if (!it.IsFound()) return Nothing(); if (result.FromJust() == ABSENT) { return Just(static_cast(NONE)); } @@ -4083,16 +4083,15 @@ v8::Object::GetRealNamedPropertyAttributesInPrototypeChain(Handle key) { MaybeLocal v8::Object::GetRealNamedProperty(Local context, Local key) { - PREPARE_FOR_EXECUTION( - context, "v8::Object::GetRealNamedPropertyInPrototypeChain()", Value); + PREPARE_FOR_EXECUTION(context, "v8::Object::GetRealNamedProperty()", Value); auto self = Utils::OpenHandle(this); auto key_obj = Utils::OpenHandle(*key); i::LookupIterator it(self, key_obj, i::LookupIterator::PROTOTYPE_CHAIN_SKIP_INTERCEPTOR); - if (!it.IsFound()) return MaybeLocal(); Local result; has_pending_exception = !ToLocal(i::Object::GetProperty(&it), &result); RETURN_ON_FAILED_EXECUTION(Value); + if (!it.IsFound()) return MaybeLocal(); RETURN_ESCAPED(result); } @@ -4112,9 +4111,9 @@ Maybe v8::Object::GetRealNamedPropertyAttributes( auto key_obj = Utils::OpenHandle(*key); i::LookupIterator it(self, key_obj, i::LookupIterator::PROTOTYPE_CHAIN_SKIP_INTERCEPTOR); - if (!it.IsFound()) return Nothing(); auto result = i::JSReceiver::GetPropertyAttributes(&it); RETURN_ON_FAILED_EXECUTION_PRIMITIVE(PropertyAttribute); + if (!it.IsFound()) return Nothing(); if (result.FromJust() == ABSENT) { return Just(static_cast(NONE)); }