Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(265)

Unified Diff: src/objects.cc

Issue 1516843002: [proxy] fixing harmony/proxy.js tests and improving error messages + some drive-by fixes (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: WIP fix protoype walks with access checks Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/objects.cc
diff --git a/src/objects.cc b/src/objects.cc
index 440d38c9f8ffe157a7d9a612a3e4832ed3e11ccd..6ac55fc5189b226784c10e3bcbc24a0f3f729603 100644
--- a/src/objects.cc
+++ b/src/objects.cc
@@ -986,8 +986,8 @@ MaybeHandle<Object> JSProxy::GetPrototype(Handle<JSProxy> proxy) {
// 8. If Type(handlerProto) is neither Object nor Null, throw a TypeError.
if (!(handler_proto->IsJSReceiver() || handler_proto->IsNull())) {
THROW_NEW_ERROR(isolate,
- NewTypeError(MessageTemplate::kProxyHandlerTrapMissing,
- handler, trap_name),
+ NewTypeError(MessageTemplate::kProxyTrapReturnedNonObject,
+ handler, handler_proto, trap_name),
Object);
}
// 9. Let extensibleTarget be ? IsExtensible(target).
@@ -1319,6 +1319,11 @@ Maybe<bool> Object::HasInPrototypeChain(Isolate* isolate, Handle<Object> object,
PrototypeIterator iter(isolate, object, PrototypeIterator::START_AT_RECEIVER);
while (true) {
if (!iter.AdvanceFollowingProxies()) return Nothing<bool>();
+ if (!iter.HasAccess()) {
+ isolate->ReportFailedAccessCheck(
+ PrototypeIterator::GetCurrent<JSObject>(iter));
+ return Nothing<bool>();
+ }
if (iter.IsAtEnd()) return Just(false);
if (iter.IsAtEnd(proto)) return Just(true);
}
@@ -4724,8 +4729,8 @@ Maybe<bool> JSProxy::SetProperty(Handle<JSProxy> proxy, Handle<Name> name,
Nothing<bool>());
if (!trap_result->BooleanValue()) {
RETURN_FAILURE(isolate, should_throw,
- NewTypeError(MessageTemplate::kProxyHandlerReturned, handler,
- factory->false_string(), trap_name));
+ NewTypeError(MessageTemplate::kProxyTrapReturnedFalseish,
+ handler, trap_result, trap_name));
}
// Enforce the invariant.
@@ -4782,8 +4787,8 @@ Maybe<bool> JSProxy::DeletePropertyOrElement(Handle<JSProxy> proxy,
Nothing<bool>());
if (!trap_result->BooleanValue()) {
RETURN_FAILURE(isolate, should_throw,
- NewTypeError(MessageTemplate::kProxyHandlerReturned, handler,
- factory->false_string(), trap_name));
+ NewTypeError(MessageTemplate::kProxyTrapReturnedFalseish,
+ handler, trap_result, trap_name));
}
// Enforce the invariant.
@@ -6835,10 +6840,9 @@ Maybe<bool> JSProxy::DefineOwnProperty(Isolate* isolate, Handle<JSProxy> proxy,
Nothing<bool>());
// 10. If booleanTrapResult is false, return false.
if (!trap_result_obj->BooleanValue()) {
- // TODO(jkummerow): Better error message?
RETURN_FAILURE(isolate, should_throw,
- NewTypeError(MessageTemplate::kProxyHandlerReturned, handler,
- trap_result_obj, trap_name));
+ NewTypeError(MessageTemplate::kProxyTrapReturnedFalseish,
+ handler, trap_result_obj, trap_name));
}
// 11. Let targetDesc be ? target.[[GetOwnProperty]](P).
PropertyDescriptor target_desc;
@@ -7005,8 +7009,8 @@ Maybe<bool> JSProxy::GetOwnPropertyDescriptor(Isolate* isolate,
// TypeError exception.
if (!trap_result_obj->IsJSReceiver() && !trap_result_obj->IsUndefined()) {
isolate->Throw(*isolate->factory()->NewTypeError(
- MessageTemplate::kProxyHandlerReturned, handler, trap_result_obj,
- name));
+ MessageTemplate::kProxyTrapReturnedFalseish, handler, trap_result_obj,
+ trap_name));
return Nothing<bool>();
}
// 10. Let targetDesc be ? target.[[GetOwnProperty]](P).
@@ -7062,7 +7066,8 @@ Maybe<bool> JSProxy::GetOwnPropertyDescriptor(Isolate* isolate,
if (target_desc.is_empty() || target_desc.configurable()) {
// 17a i. Throw a TypeError exception.
isolate->Throw(*isolate->factory()->NewTypeError(
- MessageTemplate::kRedefineDisallowed, name));
+ MessageTemplate::kProxyTrapDescriptorNonConfigurable, trap_name,
+ name));
return Nothing<bool>();
}
}
@@ -7345,8 +7350,8 @@ Maybe<bool> JSProxy::PreventExtensions(Handle<JSProxy> proxy,
Nothing<bool>());
if (!trap_result->BooleanValue()) {
RETURN_FAILURE(isolate, should_throw,
- NewTypeError(MessageTemplate::kProxyHandlerReturned, handler,
- factory->false_string(), trap_name));
+ NewTypeError(MessageTemplate::kProxyTrapReturned, handler,
+ trap_result, trap_name));
}
// Enforce the invariant.
@@ -8584,7 +8589,8 @@ Maybe<bool> JSProxy::OwnPropertyKeys(Isolate* isolate,
int* found = unchecked_result_keys.Find(key);
if (found == nullptr || *found == kGone) {
isolate->Throw(*isolate->factory()->NewTypeError(
- MessageTemplate::kProxyTrapResultMustInclude, handle(key, isolate)));
+ MessageTemplate::kProxyTrapOwnKeysResultMustInclude,
+ handle(key, isolate)));
return Nothing<bool>();
}
// 17b. Remove key from uncheckedResultKeys.
@@ -8604,7 +8610,8 @@ Maybe<bool> JSProxy::OwnPropertyKeys(Isolate* isolate,
int* found = unchecked_result_keys.Find(key);
if (found == nullptr || *found == kGone) {
isolate->Throw(*isolate->factory()->NewTypeError(
- MessageTemplate::kProxyTrapResultMustInclude, handle(key, isolate)));
+ MessageTemplate::kProxyTrapOwnKeysResultMustInclude,
+ handle(key, isolate)));
return Nothing<bool>();
}
// 19b. Remove key from uncheckedResultKeys.

Powered by Google App Engine
This is Rietveld 408576698