tor-browser

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

evals.js (1236B)


      1 // Test that we can save stacks with direct and indirect eval calls.
      2 
      3 const directEval = (function iife() {
      4  return eval("(" + function evalFrame() {
      5    return saveStack();
      6  } + "())");
      7 }());
      8 
      9 assertEq(directEval.source.includes("> eval"), true);
     10 assertEq(directEval.functionDisplayName, "evalFrame");
     11 
     12 assertEq(directEval.parent.source.includes("> eval"), true);
     13 
     14 assertEq(directEval.parent.parent.source.includes("> eval"), false);
     15 assertEq(directEval.parent.parent.functionDisplayName, "iife");
     16 
     17 assertEq(directEval.parent.parent.parent.source.includes("> eval"), false);
     18 
     19 assertEq(directEval.parent.parent.parent.parent, null);
     20 
     21 const lave = eval;
     22 const indirectEval = (function iife() {
     23  return lave("(" + function evalFrame() {
     24    return saveStack();
     25  } + "())");
     26 }());
     27 
     28 assertEq(indirectEval.source.includes("> eval"), true);
     29 assertEq(indirectEval.functionDisplayName, "evalFrame");
     30 
     31 assertEq(indirectEval.parent.source.includes("> eval"), true);
     32 
     33 assertEq(indirectEval.parent.parent.source.includes("> eval"), false);
     34 assertEq(indirectEval.parent.parent.functionDisplayName, "iife");
     35 
     36 assertEq(indirectEval.parent.parent.parent.source.includes("> eval"), false);
     37 
     38 assertEq(indirectEval.parent.parent.parent.parent, null);