mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2025-02-06 15:05:19 +00:00
Add more buffer boundary checks in wasm loader (#2734)
And fix exception not printed in `iwasm --repl` mode and resize the memory data size to UINT32_MAX if the initial page number is 65536.
This commit is contained in:
parent
cc23c7ee7d
commit
7f8292ffd1
|
@ -489,6 +489,12 @@ memory_instantiate(AOTModuleInstance *module_inst, AOTModuleInstance *parent,
|
|||
if (max_page_count > DEFAULT_MAX_PAGES)
|
||||
max_page_count = DEFAULT_MAX_PAGES;
|
||||
}
|
||||
else { /* heap_size == 0 */
|
||||
if (init_page_count == DEFAULT_MAX_PAGES) {
|
||||
num_bytes_per_page = UINT32_MAX;
|
||||
init_page_count = max_page_count = 1;
|
||||
}
|
||||
}
|
||||
|
||||
LOG_VERBOSE("Memory instantiate:");
|
||||
LOG_VERBOSE(" page bytes: %u, init pages: %u, max pages: %u",
|
||||
|
|
|
@ -173,7 +173,6 @@ fail:
|
|||
|
||||
#define read_uint8(p) TEMPLATE_READ_VALUE(uint8, p)
|
||||
#define read_uint32(p) TEMPLATE_READ_VALUE(uint32, p)
|
||||
#define read_bool(p) TEMPLATE_READ_VALUE(bool, p)
|
||||
|
||||
#define read_leb_int64(p, p_end, res) \
|
||||
do { \
|
||||
|
@ -490,6 +489,7 @@ load_init_expr(const uint8 **p_buf, const uint8 *buf_end,
|
|||
if (type != VALUE_TYPE_V128)
|
||||
goto fail_type_mismatch;
|
||||
|
||||
CHECK_BUF(p, p_end, 1);
|
||||
flag = read_uint8(p);
|
||||
(void)flag;
|
||||
|
||||
|
@ -7138,6 +7138,7 @@ re_scan:
|
|||
BlockType block_type;
|
||||
|
||||
p_org = p - 1;
|
||||
CHECK_BUF(p, p_end, 1);
|
||||
value_type = read_uint8(p);
|
||||
if (is_byte_a_type(value_type)) {
|
||||
/* If the first byte is one of these special values:
|
||||
|
@ -9099,6 +9100,7 @@ re_scan:
|
|||
{
|
||||
uint32 opcode1;
|
||||
|
||||
CHECK_BUF(p, p_end, 1);
|
||||
opcode1 = read_uint8(p);
|
||||
/* follow the order of enum WASMSimdEXTOpcode in wasm_opcode.h
|
||||
*/
|
||||
|
@ -9760,6 +9762,7 @@ re_scan:
|
|||
{
|
||||
uint32 opcode1;
|
||||
|
||||
CHECK_BUF(p, p_end, 1);
|
||||
opcode1 = read_uint8(p);
|
||||
#if WASM_ENABLE_FAST_INTERP != 0
|
||||
emit_byte(loader_ctx, opcode1);
|
||||
|
|
|
@ -276,6 +276,12 @@ memory_instantiate(WASMModuleInstance *module_inst, WASMModuleInstance *parent,
|
|||
if (max_page_count > DEFAULT_MAX_PAGES)
|
||||
max_page_count = DEFAULT_MAX_PAGES;
|
||||
}
|
||||
else { /* heap_size == 0 */
|
||||
if (init_page_count == DEFAULT_MAX_PAGES) {
|
||||
num_bytes_per_page = UINT32_MAX;
|
||||
init_page_count = max_page_count = 1;
|
||||
}
|
||||
}
|
||||
|
||||
LOG_VERBOSE("Memory instantiate:");
|
||||
LOG_VERBOSE(" page bytes: %u, init pages: %u, max pages: %u",
|
||||
|
|
|
@ -207,8 +207,11 @@ app_instance_repl(wasm_module_inst_t module_inst)
|
|||
break;
|
||||
}
|
||||
if (app_argc != 0) {
|
||||
const char *exception;
|
||||
wasm_application_execute_func(module_inst, app_argv[0],
|
||||
app_argc - 1, app_argv + 1);
|
||||
if ((exception = wasm_runtime_get_exception(module_inst)))
|
||||
printf("%s\n", exception);
|
||||
}
|
||||
free(app_argv);
|
||||
}
|
||||
|
|
|
@ -161,8 +161,11 @@ app_instance_repl(wasm_module_inst_t module_inst)
|
|||
break;
|
||||
}
|
||||
if (app_argc != 0) {
|
||||
const char *exception;
|
||||
wasm_application_execute_func(module_inst, app_argv[0],
|
||||
app_argc - 1, app_argv + 1);
|
||||
if ((exception = wasm_runtime_get_exception(module_inst)))
|
||||
printf("%s\n", exception);
|
||||
}
|
||||
free(app_argv);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user