tor-browser

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

Object-setProperty-non-primitive-key.js (1004B)


      1 var g = newGlobal({newCompartment: true});
      2 var dbg = new Debugger(g);
      3 var gw = dbg.addDebuggee(g);
      4 
      5 g.eval(`
      6  var obj = {
      7    p: 0,
      8    [Symbol.iterator]: 0,
      9  };
     10 `);
     11 
     12 // Return |key| as an object.
     13 function toObject(key) {
     14  return {
     15    [Symbol.toPrimitive]() {
     16      return key;
     17    }
     18  };
     19 }
     20 
     21 let obj = gw.getProperty("obj").return;
     22 
     23 for (let key of obj.getOwnPropertyNames()) {
     24  let keyObject = toObject(key);
     25 
     26  g.obj[key] = 1;
     27  assertEq(g.obj[key], 1);
     28  assertEq(obj.setProperty(key, 2).return, true);
     29  assertEq(g.obj[key], 2);
     30 
     31  g.obj[key] = 1;
     32  assertEq(g.obj[key], 1);
     33  assertEq(obj.setProperty(keyObject, 2).return, true);
     34  assertEq(g.obj[key], 2);
     35 }
     36 
     37 for (let key of obj.getOwnPropertySymbols()) {
     38  let keyObject = toObject(key);
     39 
     40  g.obj[key] = 1;
     41  assertEq(g.obj[key], 1);
     42  assertEq(obj.setProperty(key, 2).return, true);
     43  assertEq(g.obj[key], 2);
     44 
     45  g.obj[key] = 1;
     46  assertEq(g.obj[key], 1);
     47  assertEq(obj.setProperty(keyObject, 2).return, true);
     48  assertEq(g.obj[key], 2);
     49 }