tor-browser

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

wasm-onExceptionUnwind-gc.js (1202B)


      1 // |jit-test| skip-if: !wasmDebuggingEnabled()
      2 
      3 var sandbox = newGlobal({newCompartment: true});
      4 var dbg = new Debugger(sandbox);
      5 var counter = 0;
      6 dbg.onExceptionUnwind = (frame, value) => {
      7    if (frame.type !== "wasmcall")
      8        return;
      9    if (++counter != 2)
     10        return;
     11    gc();
     12 };
     13 
     14 sandbox.innerCode = wasmTextToBinary(`(module
     15    (import "imports" "tbl" (table 1 funcref))
     16    (import "imports" "setNull" (func $setNull))
     17    (func $trap
     18        call $setNull
     19        unreachable
     20    )
     21    (elem (i32.const 0) $trap)
     22 )`);
     23 sandbox.outerCode = wasmTextToBinary(`(module
     24    (import "imports" "tbl" (table 1 funcref))
     25    (type $v2v (func))
     26    (func (export "run")
     27        i32.const 0
     28        call_indirect (type $v2v)
     29    )
     30 )`);
     31 
     32 sandbox.eval(`
     33 (function() {
     34 
     35 var tbl = new WebAssembly.Table({initial:1, element:"funcref"});
     36 function setNull() { tbl.set(0, null) }
     37 new WebAssembly.Instance(new WebAssembly.Module(innerCode), {imports:{tbl,setNull}});
     38 var outer = new WebAssembly.Instance(new WebAssembly.Module(outerCode), {imports:{tbl}});
     39 var caught;
     40 try {
     41    outer.exports.run();
     42 } catch (e) {
     43    caught = e;
     44 }
     45 assertEq(caught instanceof WebAssembly.RuntimeError, true);
     46 
     47 })();
     48 `);