Changeset 95011 in webkit


Ignore:
Timestamp:
Sep 12, 2011 9:01:59 PM (13 years ago)
Author:
weinig@apple.com
Message:

Don't allow setting proto to be a getter or setter
https://bugs.webkit.org/show_bug.cgi?id=67982

Reviewed by Gavin Barraclough.

Source/JavaScriptCore:

  • runtime/JSObject.cpp:

(JSC::JSObject::defineGetter):
(JSC::JSObject::defineSetter):
Disallow setting a getter or setter on proto.

LayoutTests:

  • fast/js/prototypes-expected.txt:
  • fast/js/script-tests/prototypes.js:

Add test that we disallow setting a getter or setter on proto.

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r95009 r95011  
     12011-09-12  Sam Weinig  <sam@webkit.org>
     2
     3        Don't allow setting __proto__ to be a getter or setter
     4        https://bugs.webkit.org/show_bug.cgi?id=67982
     5
     6        Reviewed by Gavin Barraclough.
     7
     8        * fast/js/prototypes-expected.txt:
     9        * fast/js/script-tests/prototypes.js:
     10        Add test that we disallow setting a getter or setter on __proto__.
     11
    1122011-09-12  Jacky Jiang  <zhajiang@rim.com>
    213
  • trunk/LayoutTests/fast/js/prototypes-expected.txt

    r46963 r95011  
    5454PASS Object.__proto__.isPrototypeOf(Number) is true
    5555PASS Object.__proto__.isPrototypeOf(String) is true
     56PASS var wasSet = false; var o = { }; o.__defineGetter__("__proto__", function() { wasSet = true }); o.__proto__; wasSet; is false
     57PASS var wasSet = false; var o = { }; o.__defineSetter__("__proto__", function() { wasSet = true }); o.__proto__ = {}; wasSet; is false
    5658PASS successfullyParsed is true
    5759
  • trunk/LayoutTests/fast/js/script-tests/prototypes.js

    r48651 r95011  
    5656shouldBeTrue("Object.__proto__.isPrototypeOf(String)");
    5757
     58shouldBeFalse("var wasSet = false; var o = { }; o.__defineGetter__(\"__proto__\", function() { wasSet = true }); o.__proto__; wasSet;");
     59shouldBeFalse("var wasSet = false; var o = { }; o.__defineSetter__(\"__proto__\", function() { wasSet = true }); o.__proto__ = {}; wasSet;");
     60
    5861var successfullyParsed = true;
  • trunk/Source/JavaScriptCore/ChangeLog

    r94997 r95011  
     12011-09-12  Sam Weinig  <sam@webkit.org>
     2
     3        Don't allow setting __proto__ to be a getter or setter
     4        https://bugs.webkit.org/show_bug.cgi?id=67982
     5
     6        Reviewed by Gavin Barraclough.
     7
     8        * runtime/JSObject.cpp:
     9        (JSC::JSObject::defineGetter):
     10        (JSC::JSObject::defineSetter):
     11        Disallow setting a getter or setter on __proto__.
     12
    1132011-09-12  James Robinson  <jamesr@chromium.org>
    214
  • trunk/Source/JavaScriptCore/runtime/JSObject.cpp

    r94814 r95011  
    323323void JSObject::defineGetter(ExecState* exec, const Identifier& propertyName, JSObject* getterFunction, unsigned attributes)
    324324{
     325    if (propertyName == exec->propertyNames().underscoreProto) {
     326        // Defining a getter for __proto__ is silently ignored.
     327        return;
     328    }
     329
    325330    JSValue object = getDirect(exec->globalData(), propertyName);
    326331    if (object && object.isGetterSetter()) {
     
    349354void JSObject::defineSetter(ExecState* exec, const Identifier& propertyName, JSObject* setterFunction, unsigned attributes)
    350355{
     356    if (propertyName == exec->propertyNames().underscoreProto) {
     357        // Defining a setter for __proto__ is silently ignored.
     358        return;
     359    }
     360
    351361    JSValue object = getDirect(exec->globalData(), propertyName);
    352362    if (object && object.isGetterSetter()) {
Note: See TracChangeset for help on using the changeset viewer.