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