Commit 92b895a7 authored by adamk@chromium.org's avatar adamk@chromium.org

Harden %SetIsObserved with RUNTIME_ASSERTs

Now throws if its argument is already observed, or if the argument is
the global proxy.

BUG=371782
LOG=Y
R=jkummerow@chromium.org

Review URL: https://codereview.chromium.org/274163002

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@21256 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent cbf8c3f4
......@@ -14855,9 +14855,9 @@ RUNTIME_FUNCTION(Runtime_SetIsObserved) {
HandleScope scope(isolate);
ASSERT(args.length() == 1);
CONVERT_ARG_HANDLE_CHECKED(JSReceiver, obj, 0);
ASSERT(!obj->IsJSGlobalProxy());
if (obj->IsJSProxy())
return isolate->heap()->undefined_value();
RUNTIME_ASSERT(!obj->IsJSGlobalProxy());
if (obj->IsJSProxy()) return isolate->heap()->undefined_value();
RUNTIME_ASSERT(!obj->map()->is_observed());
ASSERT(obj->IsJSObject());
JSObject::SetObserved(Handle<JSObject>::cast(obj));
......
// Copyright 2014 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --allow-natives-syntax
// These tests are meant to ensure that that the Object.observe runtime
// functions are hardened.
var obj = {};
%SetIsObserved(obj);
assertThrows(function() {
%SetIsObserved(obj);
});
assertThrows(function() {
%SetIsObserved(this);
});
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment