Skip to content

Commit 622cdbe

Browse files
authored
Prevent undefined behavior from c_api_func_imports == NULL (#1883)
The module instance's c_api_func_imports may be NULL under some circumstances, add checks before accessing it.
1 parent 21ba730 commit 622cdbe

4 files changed

Lines changed: 15 additions & 6 deletions

File tree

core/iwasm/aot/aot_runtime.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1787,7 +1787,9 @@ aot_invoke_native(WASMExecEnv *exec_env, uint32 func_idx, uint32 argc,
17871787
AOTModuleInstanceExtra *module_inst_extra =
17881788
(AOTModuleInstanceExtra *)module_inst->e;
17891789
CApiFuncImport *c_api_func_import =
1790-
module_inst_extra->c_api_func_imports + func_idx;
1790+
module_inst_extra->c_api_func_imports
1791+
? module_inst_extra->c_api_func_imports + func_idx
1792+
: NULL;
17911793
uint32 *func_type_indexes = module_inst->func_type_indexes;
17921794
uint32 func_type_idx = func_type_indexes[func_idx];
17931795
AOTFuncType *func_type = aot_module->func_types[func_type_idx];
@@ -1803,7 +1805,8 @@ aot_invoke_native(WASMExecEnv *exec_env, uint32 func_idx, uint32 argc,
18031805

18041806
import_func = aot_module->import_funcs + func_idx;
18051807
if (import_func->call_conv_wasm_c_api)
1806-
func_ptr = c_api_func_import->func_ptr_linked;
1808+
func_ptr =
1809+
c_api_func_import ? c_api_func_import->func_ptr_linked : NULL;
18071810

18081811
if (!func_ptr) {
18091812
snprintf(buf, sizeof(buf),

core/iwasm/interpreter/wasm_interp_classic.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -891,7 +891,7 @@ wasm_interp_call_func_native(WASMModuleInstance *module_inst,
891891
if (!func_import->call_conv_wasm_c_api) {
892892
native_func_pointer = module_inst->import_func_ptrs[cur_func_index];
893893
}
894-
else {
894+
else if (module_inst->e->c_api_func_imports) {
895895
c_api_func_import = module_inst->e->c_api_func_imports + cur_func_index;
896896
native_func_pointer = c_api_func_import->func_ptr_linked;
897897
}

core/iwasm/interpreter/wasm_interp_fast.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -925,7 +925,7 @@ wasm_interp_call_func_native(WASMModuleInstance *module_inst,
925925
if (!func_import->call_conv_wasm_c_api) {
926926
native_func_pointer = module_inst->import_func_ptrs[cur_func_index];
927927
}
928-
else {
928+
else if (module_inst->e->c_api_func_imports) {
929929
c_api_func_import = module_inst->e->c_api_func_imports + cur_func_index;
930930
native_func_pointer = c_api_func_import->func_ptr_linked;
931931
}

core/iwasm/interpreter/wasm_runtime.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2908,8 +2908,14 @@ llvm_jit_invoke_native(WASMExecEnv *exec_env, uint32 func_idx, uint32 argc,
29082908

29092909
import_func = &module->import_functions[func_idx].u.function;
29102910
if (import_func->call_conv_wasm_c_api) {
2911-
c_api_func_import = module_inst->e->c_api_func_imports + func_idx;
2912-
func_ptr = c_api_func_import->func_ptr_linked;
2911+
if (module_inst->e->c_api_func_imports) {
2912+
c_api_func_import = module_inst->e->c_api_func_imports + func_idx;
2913+
func_ptr = c_api_func_import->func_ptr_linked;
2914+
}
2915+
else {
2916+
c_api_func_import = NULL;
2917+
func_ptr = NULL;
2918+
}
29132919
}
29142920

29152921
if (!func_ptr) {

0 commit comments

Comments
 (0)