tor-browser

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

bindings-inject-keys-bypass.any.js (1025B)


      1 // META: global=window,worker
      2 // META: title=IndexedDB: ES bindings - Inject a key into a value - Keys bypass setters
      3 // META: script=resources/support-promises.js
      4 'use strict';
      5 
      6 
      7 promise_test(async t => {
      8  const db = await createDatabase(t, db => {
      9    db.createObjectStore('store');
     10  });
     11 
     12  let setter_called = false;
     13  Object.defineProperty(Object.prototype, '10', {
     14    configurable: true,
     15    set: value => { setter_called = true; },
     16  });
     17  t.add_cleanup(() => { delete Object.prototype['10']; });
     18 
     19  const tx = db.transaction('store', 'readwrite');
     20  const result = await promiseForRequest(t, tx.objectStore('store').put(
     21    'value', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'key']));
     22 
     23  assert_false(setter_called,
     24    'Setter should not be called for key result.');
     25  assert_true(result.hasOwnProperty('10'),
     26    'Result should have own-property overriding prototype setter.');
     27  assert_equals(result[10], 'key',
     28    'Result should have expected property.');
     29 }, 'Returning keys to script should bypass prototype setters');