summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/wasm/utf8.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/wasm/utf8.js')
-rw-r--r--js/src/jit-test/tests/wasm/utf8.js36
1 files changed, 36 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/wasm/utf8.js b/js/src/jit-test/tests/wasm/utf8.js
new file mode 100644
index 0000000000..fdda7ab0ca
--- /dev/null
+++ b/js/src/jit-test/tests/wasm/utf8.js
@@ -0,0 +1,36 @@
+/*
+(module
+ (func (param i32) (result i32)
+ (i32.add (local.get 0) (local.get 0)))
+ (export "hello" (func 0)))
+*/
+
+var txt =
+`00 61 73 6d 01 00 00 00 01 06 01 60 01 7f 01 7f
+ 03 02 01 00 07 09 01 05 68 65 6c 6c 6f 00 00 0a
+ 09 01 07 00 20 00 20 00 6a 0b`
+
+var bin = new Uint8Array(txt.split(" ").map((x) => parseInt(x, 16)));
+var mod = new WebAssembly.Module(bin);
+var ins = new WebAssembly.Instance(mod);
+
+assertEq(ins.exports.hello(37), 2*37);
+
+assertEq(bin[25], 0x65); // the 'e' in 'hello'
+bin[25] = 0x85; // bad UTF-8
+
+assertEq(WebAssembly.validate(bin), false);
+
+assertThrowsInstanceOf(() => new WebAssembly.Module(bin), WebAssembly.CompileError);
+
+assertThrowsInstanceOf(() => wasmEvalText(`(module (import "\u2603" "" (func))) `, {}), TypeError);
+
+{
+ let i1 = wasmEvalText(` (module (func (export "\u2603")))`);
+ assertThrowsInstanceOf(() => wasmEvalText(`(module (import "" "\u2603" (func (result i32))))`,
+ { "": { "\u2603": i1.exports['\u2603'] } }),
+ WebAssembly.LinkError);
+ assertThrowsInstanceOf(() => wasmEvalText(`(module (import "\u2603" "" (func (result i32))))`,
+ { "\u2603": { "": i1.exports['\u2603'] } }),
+ WebAssembly.LinkError);
+}