mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2025-02-06 23:15:16 +00:00
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.
This commit is contained in:
parent
21ba730de3
commit
622cdbefd6
|
@ -1787,7 +1787,9 @@ aot_invoke_native(WASMExecEnv *exec_env, uint32 func_idx, uint32 argc,
|
||||||
AOTModuleInstanceExtra *module_inst_extra =
|
AOTModuleInstanceExtra *module_inst_extra =
|
||||||
(AOTModuleInstanceExtra *)module_inst->e;
|
(AOTModuleInstanceExtra *)module_inst->e;
|
||||||
CApiFuncImport *c_api_func_import =
|
CApiFuncImport *c_api_func_import =
|
||||||
module_inst_extra->c_api_func_imports + func_idx;
|
module_inst_extra->c_api_func_imports
|
||||||
|
? module_inst_extra->c_api_func_imports + func_idx
|
||||||
|
: NULL;
|
||||||
uint32 *func_type_indexes = module_inst->func_type_indexes;
|
uint32 *func_type_indexes = module_inst->func_type_indexes;
|
||||||
uint32 func_type_idx = func_type_indexes[func_idx];
|
uint32 func_type_idx = func_type_indexes[func_idx];
|
||||||
AOTFuncType *func_type = aot_module->func_types[func_type_idx];
|
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,
|
||||||
|
|
||||||
import_func = aot_module->import_funcs + func_idx;
|
import_func = aot_module->import_funcs + func_idx;
|
||||||
if (import_func->call_conv_wasm_c_api)
|
if (import_func->call_conv_wasm_c_api)
|
||||||
func_ptr = c_api_func_import->func_ptr_linked;
|
func_ptr =
|
||||||
|
c_api_func_import ? c_api_func_import->func_ptr_linked : NULL;
|
||||||
|
|
||||||
if (!func_ptr) {
|
if (!func_ptr) {
|
||||||
snprintf(buf, sizeof(buf),
|
snprintf(buf, sizeof(buf),
|
||||||
|
|
|
@ -891,7 +891,7 @@ wasm_interp_call_func_native(WASMModuleInstance *module_inst,
|
||||||
if (!func_import->call_conv_wasm_c_api) {
|
if (!func_import->call_conv_wasm_c_api) {
|
||||||
native_func_pointer = module_inst->import_func_ptrs[cur_func_index];
|
native_func_pointer = module_inst->import_func_ptrs[cur_func_index];
|
||||||
}
|
}
|
||||||
else {
|
else if (module_inst->e->c_api_func_imports) {
|
||||||
c_api_func_import = module_inst->e->c_api_func_imports + cur_func_index;
|
c_api_func_import = module_inst->e->c_api_func_imports + cur_func_index;
|
||||||
native_func_pointer = c_api_func_import->func_ptr_linked;
|
native_func_pointer = c_api_func_import->func_ptr_linked;
|
||||||
}
|
}
|
||||||
|
|
|
@ -925,7 +925,7 @@ wasm_interp_call_func_native(WASMModuleInstance *module_inst,
|
||||||
if (!func_import->call_conv_wasm_c_api) {
|
if (!func_import->call_conv_wasm_c_api) {
|
||||||
native_func_pointer = module_inst->import_func_ptrs[cur_func_index];
|
native_func_pointer = module_inst->import_func_ptrs[cur_func_index];
|
||||||
}
|
}
|
||||||
else {
|
else if (module_inst->e->c_api_func_imports) {
|
||||||
c_api_func_import = module_inst->e->c_api_func_imports + cur_func_index;
|
c_api_func_import = module_inst->e->c_api_func_imports + cur_func_index;
|
||||||
native_func_pointer = c_api_func_import->func_ptr_linked;
|
native_func_pointer = c_api_func_import->func_ptr_linked;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2908,8 +2908,14 @@ llvm_jit_invoke_native(WASMExecEnv *exec_env, uint32 func_idx, uint32 argc,
|
||||||
|
|
||||||
import_func = &module->import_functions[func_idx].u.function;
|
import_func = &module->import_functions[func_idx].u.function;
|
||||||
if (import_func->call_conv_wasm_c_api) {
|
if (import_func->call_conv_wasm_c_api) {
|
||||||
c_api_func_import = module_inst->e->c_api_func_imports + func_idx;
|
if (module_inst->e->c_api_func_imports) {
|
||||||
func_ptr = c_api_func_import->func_ptr_linked;
|
c_api_func_import = module_inst->e->c_api_func_imports + func_idx;
|
||||||
|
func_ptr = c_api_func_import->func_ptr_linked;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
c_api_func_import = NULL;
|
||||||
|
func_ptr = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!func_ptr) {
|
if (!func_ptr) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user