summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/wasm/memory64/data-active.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/wasm/memory64/data-active.js')
-rw-r--r--js/src/jit-test/tests/wasm/memory64/data-active.js34
1 files changed, 34 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/wasm/memory64/data-active.js b/js/src/jit-test/tests/wasm/memory64/data-active.js
new file mode 100644
index 0000000000..7f40861aba
--- /dev/null
+++ b/js/src/jit-test/tests/wasm/memory64/data-active.js
@@ -0,0 +1,34 @@
+// |jit-test| allow-oom; skip-if: !canRunHugeMemoryTests()
+
+function testIt(s, addr) {
+ try {
+ var ins = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(`
+(module
+ (memory (export "mem") i64 65537)
+ (data (i64.const ${addr}) "${s}"))`)));
+ } catch (e) {
+ if (e instanceof WebAssembly.RuntimeError && String(e).match(/too many memory pages/)) {
+ return;
+ }
+ throw e;
+ }
+ var mem = new Uint8Array(ins.exports.mem.buffer);
+ assertEq(String.fromCodePoint(...mem.slice(addr, addr + s.length)), s)
+}
+
+// Test that an active data segment targeting the area above 4GB works as expected
+testIt("hello, world!", 0x100000020);
+
+// Ditto, but crosses the 4GB boundary
+var s = "supercalifragilisticexpialidocious";
+testIt(s, 0x100000000 - Math.floor(s.length / 2));
+
+// This is OOB above the 4GB boundary - throws OOB during instantiation.
+// But can also throw for OOM when trying to create the memory.
+assertErrorMessage(() => new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(`
+(module
+ (memory (export "mem") i64 65537)
+ (data (i64.const ${65536*65537-10}) "supercalifragilisticexpialidocious"))`))),
+ WebAssembly.RuntimeError,
+ /(out of bounds)|(too many memory pages)/);
+