Index: src/wasm/wasm-module.cc |
diff --git a/src/wasm/wasm-module.cc b/src/wasm/wasm-module.cc |
index 179af57ac6d626c06d0fc315d2aa38826b37892b..3778b6307cc8d0d95eb1cf03aeb62acc6927dbcc 100644 |
--- a/src/wasm/wasm-module.cc |
+++ b/src/wasm/wasm-module.cc |
@@ -916,10 +916,14 @@ static Handle<Code> CompileImportWrapper(Isolate* isolate, int index, |
MaybeHandle<String> import_name) { |
Handle<Code> code; |
WasmFunction* other_func = GetWasmFunctionForImportWrapper(isolate, target); |
- if (other_func && sig->Equals(other_func->sig)) { |
- // Signature matched. Unwrap the JS->WASM wrapper and return the raw |
- // WASM function code. |
- return UnwrapImportWrapper(target); |
+ if (other_func) { |
+ if (sig->Equals(other_func->sig)) { |
+ // Signature matched. Unwrap the JS->WASM wrapper and return the raw |
+ // WASM function code. |
+ return UnwrapImportWrapper(target); |
+ } else { |
+ return Handle<Code>::null(); |
+ } |
} else { |
// Signature mismatch. Compile a new wrapper for the new signature. |
return compiler::CompileWasmToJSWrapper(isolate, target, sig, index, |
@@ -1449,6 +1453,11 @@ class WasmInstanceBuilder { |
Handle<Code> import_wrapper = CompileImportWrapper( |
isolate_, index, module_->functions[import.index].sig, |
Handle<JSReceiver>::cast(function), module_name, function_name); |
+ if (import_wrapper.is_null()) { |
+ ReportFFIError("imported function does not match the expected type", |
+ index, module_name, function_name); |
+ return -1; |
+ } |
code_table->set(num_imported_functions, *import_wrapper); |
RecordStats(isolate_, *import_wrapper); |
num_imported_functions++; |