mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2025-06-02 06:57:12 +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)
|
if (max_page_count > DEFAULT_MAX_PAGES)
|
||||||
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("Memory instantiate:");
|
||||||
LOG_VERBOSE(" page bytes: %u, init pages: %u, max pages: %u",
|
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_uint8(p) TEMPLATE_READ_VALUE(uint8, p)
|
||||||
#define read_uint32(p) TEMPLATE_READ_VALUE(uint32, 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) \
|
#define read_leb_int64(p, p_end, res) \
|
||||||
do { \
|
do { \
|
||||||
|
@ -490,6 +489,7 @@ load_init_expr(const uint8 **p_buf, const uint8 *buf_end,
|
||||||
if (type != VALUE_TYPE_V128)
|
if (type != VALUE_TYPE_V128)
|
||||||
goto fail_type_mismatch;
|
goto fail_type_mismatch;
|
||||||
|
|
||||||
|
CHECK_BUF(p, p_end, 1);
|
||||||
flag = read_uint8(p);
|
flag = read_uint8(p);
|
||||||
(void)flag;
|
(void)flag;
|
||||||
|
|
||||||
|
@ -7138,6 +7138,7 @@ re_scan:
|
||||||
BlockType block_type;
|
BlockType block_type;
|
||||||
|
|
||||||
p_org = p - 1;
|
p_org = p - 1;
|
||||||
|
CHECK_BUF(p, p_end, 1);
|
||||||
value_type = read_uint8(p);
|
value_type = read_uint8(p);
|
||||||
if (is_byte_a_type(value_type)) {
|
if (is_byte_a_type(value_type)) {
|
||||||
/* If the first byte is one of these special values:
|
/* If the first byte is one of these special values:
|
||||||
|
@ -9099,6 +9100,7 @@ re_scan:
|
||||||
{
|
{
|
||||||
uint32 opcode1;
|
uint32 opcode1;
|
||||||
|
|
||||||
|
CHECK_BUF(p, p_end, 1);
|
||||||
opcode1 = read_uint8(p);
|
opcode1 = read_uint8(p);
|
||||||
/* follow the order of enum WASMSimdEXTOpcode in wasm_opcode.h
|
/* follow the order of enum WASMSimdEXTOpcode in wasm_opcode.h
|
||||||
*/
|
*/
|
||||||
|
@ -9760,6 +9762,7 @@ re_scan:
|
||||||
{
|
{
|
||||||
uint32 opcode1;
|
uint32 opcode1;
|
||||||
|
|
||||||
|
CHECK_BUF(p, p_end, 1);
|
||||||
opcode1 = read_uint8(p);
|
opcode1 = read_uint8(p);
|
||||||
#if WASM_ENABLE_FAST_INTERP != 0
|
#if WASM_ENABLE_FAST_INTERP != 0
|
||||||
emit_byte(loader_ctx, opcode1);
|
emit_byte(loader_ctx, opcode1);
|
||||||
|
|
|
@ -276,6 +276,12 @@ memory_instantiate(WASMModuleInstance *module_inst, WASMModuleInstance *parent,
|
||||||
if (max_page_count > DEFAULT_MAX_PAGES)
|
if (max_page_count > DEFAULT_MAX_PAGES)
|
||||||
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("Memory instantiate:");
|
||||||
LOG_VERBOSE(" page bytes: %u, init pages: %u, max pages: %u",
|
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;
|
break;
|
||||||
}
|
}
|
||||||
if (app_argc != 0) {
|
if (app_argc != 0) {
|
||||||
|
const char *exception;
|
||||||
wasm_application_execute_func(module_inst, app_argv[0],
|
wasm_application_execute_func(module_inst, app_argv[0],
|
||||||
app_argc - 1, app_argv + 1);
|
app_argc - 1, app_argv + 1);
|
||||||
|
if ((exception = wasm_runtime_get_exception(module_inst)))
|
||||||
|
printf("%s\n", exception);
|
||||||
}
|
}
|
||||||
free(app_argv);
|
free(app_argv);
|
||||||
}
|
}
|
||||||
|
|
|
@ -161,8 +161,11 @@ app_instance_repl(wasm_module_inst_t module_inst)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (app_argc != 0) {
|
if (app_argc != 0) {
|
||||||
|
const char *exception;
|
||||||
wasm_application_execute_func(module_inst, app_argv[0],
|
wasm_application_execute_func(module_inst, app_argv[0],
|
||||||
app_argc - 1, app_argv + 1);
|
app_argc - 1, app_argv + 1);
|
||||||
|
if ((exception = wasm_runtime_get_exception(module_inst)))
|
||||||
|
printf("%s\n", exception);
|
||||||
}
|
}
|
||||||
free(app_argv);
|
free(app_argv);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user