tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

proxy-non-enumerable-prop-invariant-2.js (1568B)


      1 // Copyright (C) 2019 Alexey Shvayka. All rights reserved.
      2 // This code is governed by the BSD license found in the LICENSE file.
      3 
      4 /*---
      5 esid: sec-object.keys
      6 description: >
      7  Proxy [[OwnPropertyKeys]] trap does not skip non-enumerable keys when validating invariant:
      8  * If the target object is not extensible, then the result List must contain all the keys of
      9    the own properties of the target object and no other values.
     10 info: |
     11  Object.keys ( O )
     12 
     13  ...
     14  2. Let nameList be ? EnumerableOwnPropertyNames(obj, "key").
     15 
     16  EnumerableOwnPropertyNames ( O, kind )
     17 
     18  ...
     19  2. Let ownKeys be ? O.[[OwnPropertyKeys]]().
     20 
     21  [[OwnPropertyKeys]] ( )
     22 
     23  ...
     24  11. Let targetKeys be ? target.[[OwnPropertyKeys]]().
     25  16. For each element key of targetKeys, do
     26    a. Let desc be ? target.[[GetOwnProperty]](key).
     27    b. If desc is not undefined and desc.[[Configurable]] is false, then
     28      ...
     29    c. Else,
     30      i. Append key as an element of targetConfigurableKeys.
     31  ...
     32  18. Let uncheckedResultKeys be a new List which is a copy of trapResult.
     33  ...
     34  21. For each key that is an element of targetConfigurableKeys, do
     35    a. If key is not an element of uncheckedResultKeys, throw a TypeError exception.
     36 features: [Proxy]
     37 ---*/
     38 
     39 var target = {};
     40 Object.defineProperty(target, 'prop', {
     41  value: 2,
     42  writable: true,
     43  enumerable: false,
     44  configurable: true,
     45 });
     46 
     47 var proxy = new Proxy(target, {
     48  ownKeys: function() {
     49    return [];
     50  },
     51 });
     52 
     53 Object.preventExtensions(target);
     54 
     55 assert.throws(TypeError, function() {
     56  Object.keys(proxy);
     57 });
     58 
     59 reportCompare(0, 0);