diff options
author | Casper Beyer <caspervonb@pm.me> | 2020-06-11 15:03:27 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-11 11:03:27 -0400 |
commit | 813210d4337bf6e174f1da1f1a6c6fb9b073afa2 (patch) | |
tree | fa408a74ced787b2864dbfec524c1ea6588fde00 | |
parent | 5ee2ce1b1c37f08b11a25e6c0d190f3c397c7ec2 (diff) |
fix: WebAssembly runtime error propagation (#6137)
Currently WebAssembly runtime errors don't propagate up to the user as
they use urls to denote where the error occurred which get caught by the source-map
pipeline which doesn't support the wasm scheme.
-rw-r--r-- | cli/disk_cache.rs | 3 | ||||
-rw-r--r-- | cli/tests/integration_tests.rs | 6 | ||||
-rw-r--r-- | cli/tests/wasm_unreachable.js | 50 | ||||
-rw-r--r-- | cli/tests/wasm_unreachable.out | 3 |
4 files changed, 61 insertions, 1 deletions
diff --git a/cli/disk_cache.rs b/cli/disk_cache.rs index 58744acd8..965f8c096 100644 --- a/cli/disk_cache.rs +++ b/cli/disk_cache.rs @@ -50,7 +50,7 @@ impl DiskCache { out.push(scheme); match scheme { - "http" | "https" => { + "http" | "https" | "wasm" => { let host = url.host_str().unwrap(); let host_port = match url.port() { // Windows doesn't support ":" in filenames, so we represent port using a @@ -196,6 +196,7 @@ mod tests { "https://deno.land/std/http/file_server.ts", "https/deno.land/std/http/file_server.ts", ), + ("wasm://wasm/d1c677ea", "wasm/wasm/d1c677ea"), ]; if cfg!(target_os = "windows") { diff --git a/cli/tests/integration_tests.rs b/cli/tests/integration_tests.rs index 5ecd6d35b..9bdc1db60 100644 --- a/cli/tests/integration_tests.rs +++ b/cli/tests/integration_tests.rs @@ -1872,6 +1872,12 @@ itest!(wasm_async { output: "wasm_async.out", }); +itest!(wasm_unreachable { + args: "run wasm_unreachable.js", + output: "wasm_unreachable.out", + exit_code: 1, +}); + itest!(top_level_await { args: "run --allow-read top_level_await.js", output: "top_level_await.out", diff --git a/cli/tests/wasm_unreachable.js b/cli/tests/wasm_unreachable.js new file mode 100644 index 000000000..991ebcec8 --- /dev/null +++ b/cli/tests/wasm_unreachable.js @@ -0,0 +1,50 @@ +// WebAssembly module containing a single function with an unreachable instruction +const binary = Uint8Array.from([ + 0x00, + 0x61, + 0x73, + 0x6d, + 0x01, + 0x00, + 0x00, + 0x00, + 0x01, + 0x04, + 0x01, + 0x60, + 0x00, + 0x00, + 0x03, + 0x02, + 0x01, + 0x00, + 0x07, + 0x0f, + 0x01, + 0x0b, + 0x75, + 0x6e, + 0x72, + 0x65, + 0x61, + 0x63, + 0x68, + 0x61, + 0x62, + 0x6c, + 0x65, + 0x00, + 0x00, + 0x0a, + 0x05, + 0x01, + 0x03, + 0x00, + 0x00, + 0x0b, +]); + +const module = new WebAssembly.Module(binary); +const instance = new WebAssembly.Instance(module); + +instance.exports.unreachable(); diff --git a/cli/tests/wasm_unreachable.out b/cli/tests/wasm_unreachable.out new file mode 100644 index 000000000..64978bbb8 --- /dev/null +++ b/cli/tests/wasm_unreachable.out @@ -0,0 +1,3 @@ +error: Uncaught RuntimeError: unreachable + at unreachable (<anonymous>:0:40) + at [WILDCARD]/deno/cli/tests/wasm_unreachable.js:[WILDCARD]:18 |