tor-browser

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

lastIndex-non-writable.js (1714B)


      1 function testGlobalExec() {
      2    var re = /abc.+de/g;
      3    var c = 0;
      4    for (var i = 0; i < 100; i++) {
      5        re.lastIndex = 0;
      6        if (i === 60) {
      7            Object.freeze(re);
      8        }
      9        try {
     10            re.exec("abcXdef");
     11        } catch (e) {
     12            assertEq(e.toString().includes("lastIndex"), true);
     13            c++;
     14        }
     15        assertEq(re.lastIndex, i >= 60 ? 0 : 6);
     16    }
     17    assertEq(c, 40);
     18 }
     19 testGlobalExec();
     20 
     21 function testStickyTest() {
     22    var re = /abc.+de/y;
     23    var c = 0;
     24    for (var i = 0; i < 100; i++) {
     25        re.lastIndex = 0;
     26        if (i === 60) {
     27            Object.freeze(re);
     28        }
     29        try {
     30            re.test("abcXdef");
     31        } catch (e) {
     32            assertEq(e.toString().includes("lastIndex"), true);
     33            c++;
     34        }
     35        assertEq(re.lastIndex, i >= 60 ? 0 : 6);
     36    }
     37    assertEq(c, 40);
     38 }
     39 testStickyTest();
     40 
     41 // Must not reset too-large .lastIndex to 0 if non-writable.
     42 function testLastIndexOutOfRange() {
     43    var re = /abc.+de/g;
     44    re.lastIndex = 123;
     45    Object.freeze(re);
     46    for (var i = 0; i < 100; i++) {
     47        var ex = null;
     48        try {
     49            re.exec("abcXdef");
     50        } catch (e) {
     51            ex = e;
     52        }
     53        assertEq(ex.toString().includes("lastIndex"), true);
     54        assertEq(re.lastIndex, 123);
     55    }
     56 }
     57 testLastIndexOutOfRange();
     58 
     59 // .lastIndex is ignored for non-global/non-sticky regexps.
     60 function testPlainExec() {
     61    var re = /abc.+de/;
     62    re.lastIndex = 1234;
     63    for (var i = 0; i < 100; i++) {
     64        if (i === 60) {
     65            Object.freeze(re);
     66        }
     67        assertEq(re.exec("abcXdef")[0], "abcXde");
     68        assertEq(re.lastIndex, 1234);
     69    }
     70 }
     71 testPlainExec();