tor-browser

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

cross-realm-spread-call.js (952B)


      1 // Test for `foo(...arguments)` spread calls with a cross-realm ArgumentsObject.
      2 function testArgs(a, b, c) {
      3  return `${a} ${b} ${c}`;
      4 }
      5 function test() {
      6  var g = newGlobal();
      7  // Replace g.%ArrayIteratorPrototype%.next.
      8  g.evaluate(`
      9    let arrIterProto = Object.getPrototypeOf([][Symbol.iterator]());
     10    let count = 0;
     11    arrIterProto.next = function() {
     12      if (count > 2) {
     13        count = 0;
     14        return {done: true, value: 0};
     15      }
     16      return {done: false, value:count++ * 5} };
     17  `);
     18  for (var i = 0; i < 30; i++) {
     19    var myRealmArgs = () => (function() { return arguments; })(1, 2, 3);
     20    var crossRealmArgs = () => g.evaluate(`(function() { return arguments; })(1, 2, 3)`);  
     21    assertEq(testArgs(...myRealmArgs()), "1 2 3");
     22    assertEq(testArgs(...crossRealmArgs()), "0 5 10");
     23    var mixed = (i & 1) ? myRealmArgs() : crossRealmArgs();
     24    assertEq(testArgs(...mixed), (i & 1) ? "1 2 3" : "0 5 10");
     25  }
     26 }
     27 test();