Skip to content

Commit 63b8849

Browse files
thibaudmichaudV8 LUCI CQ
authored andcommitted
[wasm][exnref] Reject non-nullable exnref in JS import/export
R=jkummerow@chromium.org Change-Id: I0ba2deb1a9671d87e76fea7bfe76df9eee56442a Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/5920338 Commit-Queue: Thibaud Michaud <thibaudm@chromium.org> Reviewed-by: Jakob Kummerow <jkummerow@chromium.org> Cr-Commit-Position: refs/heads/main@{#96489}
1 parent da095f0 commit 63b8849

2 files changed

Lines changed: 20 additions & 1 deletion

File tree

src/wasm/wasm-opcodes.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,13 @@ bool IsJSCompatibleSignature(const FunctionSig* sig) {
3333
// Rtts are internal-only. They should never be part of a signature.
3434
DCHECK(!type.is_rtt());
3535
if (type == kWasmS128) return false;
36-
if (type == kWasmExnRef) return false;
3736
if (type.is_object_reference()) {
3837
switch (type.heap_representation_non_shared()) {
3938
case HeapType::kStringViewWtf8:
4039
case HeapType::kStringViewWtf16:
4140
case HeapType::kStringViewIter:
41+
case HeapType::kExn:
42+
case HeapType::kNoExn:
4243
return false;
4344
default:
4445
break;

test/mjsunit/wasm/exnref.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -653,3 +653,21 @@ d8.file.execute("test/mjsunit/wasm/exceptions-utils.js");
653653

654654
assertTraps(kTrapRethrowNull, () => instance.exports.throw_noexn());
655655
})();
656+
657+
(function TestJSNonNullableExnRef() {
658+
print(arguments.callee.name);
659+
let builder = new WasmModuleBuilder();
660+
let import_sig = makeSig([], [wasmRefType(kWasmExnRef)]);
661+
let imported = builder.addImport('m', 'i', import_sig);
662+
builder.addFunction("call_import", kSig_v_v)
663+
.addBody([
664+
kExprCallFunction, imported,
665+
kExprDrop,
666+
]).exportFunc();
667+
let export_sig = makeSig([wasmRefType(kWasmExnRef)], []);
668+
builder.addFunction("export", export_sig)
669+
.addBody([]).exportFunc();
670+
let instance = builder.instantiate({m: {i: () => {}}});
671+
assertThrows(instance.exports.call_import);
672+
assertThrows(instance.exports.export);
673+
})();

0 commit comments

Comments
 (0)