| 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++;
|
|
|