tor-browser

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

surfaces-offsets.js (1910B)


      1 // Invalid offsets result in exceptions, not bogus results.
      2 
      3 load(libdir + "asserts.js");
      4 
      5 var g = newGlobal({newCompartment: true});
      6 var dbg = Debugger(g);
      7 var hits;
      8 dbg.onDebuggerStatement = function (frame) {
      9    assertEq(frame.script.getOffsetLocation(frame.offset).lineNumber, g.line);
     10    assertThrowsInstanceOf(function () { frame.script.getOffsetLocation(String(frame.offset)).lineNumber; }, Error);
     11    assertThrowsInstanceOf(function () { frame.script.getOffsetLocation(Object(frame.offset)).lineNumber; }, Error);
     12 
     13    assertThrowsInstanceOf(function () { frame.script.getOffsetLocation(-1).lineNumber; }, Error);
     14    assertThrowsInstanceOf(function () { frame.script.getOffsetLocation(1000000).lineNumber; }, Error);
     15    assertThrowsInstanceOf(function () { frame.script.getOffsetLocation(0.25).lineNumber; }, Error);
     16    assertThrowsInstanceOf(function () { frame.script.getOffsetLocation(+Infinity).lineNumber; }, Error);
     17    assertThrowsInstanceOf(function () { frame.script.getOffsetLocation(-Infinity).lineNumber; }, Error);
     18    assertThrowsInstanceOf(function () { frame.script.getOffsetLocation(NaN).lineNumber; }, Error);
     19 
     20    assertThrowsInstanceOf(function () { frame.script.getOffsetLocation(false).lineNumber; }, Error);
     21    assertThrowsInstanceOf(function () { frame.script.getOffsetLocation(true).lineNumber; }, Error);
     22    assertThrowsInstanceOf(function () { frame.script.getOffsetLocation(undefined).lineNumber; }, Error);
     23    assertThrowsInstanceOf(function () { frame.script.getOffsetLocation().lineNumber; }, Error);
     24 
     25    // We assume that at least one whole number between 0 and frame.offset is invalid.
     26    assertThrowsInstanceOf(
     27        function () {
     28            for (var i = 0; i < frame.offset; i++)
     29                frame.script.getOffsetLocation(i).lineNumber;
     30        },
     31        Error);
     32 
     33    hits++;
     34 };
     35 
     36 hits = 0;
     37 g.eval("var line = new Error().lineNumber; debugger;");