tor-browser

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

iterclose-invalidate.js (829B)


      1 var returnInvalid = false;
      2 
      3 const iterable = {
      4  [Symbol.iterator]() {
      5    return {
      6      i: 0,
      7      next() {
      8        return { value: this.i++, done: false }
      9      },
     10      return() {
     11        if (returnInvalid) {
     12          // Invalidate Ion scripts.
     13          gc(closeIter, 'shrinking');
     14          return undefined;
     15        }
     16        return { value: "return", done: true };
     17      }
     18    };
     19  }
     20 }
     21 
     22 function closeIter(o) {
     23  for (var x of o) {
     24    if (x == 2) {
     25      break;
     26    }
     27  }
     28 }
     29 
     30 function test() {
     31  with ({}) {}
     32  for (var i = 0; i < 100; i++) {
     33    closeIter(iterable);
     34  }
     35  returnInvalid = true;
     36  var caught = false;
     37  try {
     38    closeIter(iterable);
     39  } catch {
     40    caught = true;
     41  }
     42  assertEq(caught, true);
     43  returnInvalid = false;
     44 }
     45 
     46 with ({}) {}
     47 
     48 test();
     49 
     50 // Force an IC in Ion.
     51 closeIter([1,2,3,4,5]);
     52 
     53 test();