tor-browser

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

data-active.js (1298B)


      1 // |jit-test| heavy; allow-oom; skip-if: !canRunHugeMemoryTests()
      2 
      3 function testIt(s, addr) {
      4    try {
      5        var ins = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(`
      6 (module
      7  (memory (export "mem") i64 65537)
      8  (data (i64.const ${addr}) "${s}"))`)));
      9    } catch (e) {
     10        if (e instanceof WebAssembly.RuntimeError && String(e).match(/too many memory pages/)) {
     11            return;
     12        }
     13        throw e;
     14    }
     15    var mem = new Uint8Array(ins.exports.mem.buffer);
     16    assertEq(String.fromCodePoint(...mem.slice(addr, addr + s.length)), s)
     17 }
     18 
     19 // Test that an active data segment targeting the area above 4GB works as expected
     20 testIt("hello, world!", 0x100000020);
     21 
     22 // Ditto, but crosses the 4GB boundary
     23 var s = "supercalifragilisticexpialidocious";
     24 testIt(s, 0x100000000 - Math.floor(s.length / 2));
     25 
     26 // This is OOB above the 4GB boundary - throws OOB during instantiation.
     27 // But can also throw for OOM when trying to create the memory.
     28 assertErrorMessage(() => new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(`
     29 (module
     30  (memory (export "mem") i64 65537)
     31  (data (i64.const ${65536*65537-10}) "supercalifragilisticexpialidocious"))`))),
     32                   WebAssembly.RuntimeError,
     33                   /(out of bounds)|(too many memory pages)/);