Fix wasm loader handle op_br_table and op_drop (#2864)

- Fix op_br_table arity type check when the dest block is loop block
- Fix op_drop issue when the stack is polymorphic and it is to drop
  an ANY type value in the stack
This commit is contained in:
Wenyong Huang 2023-12-05 16:59:13 +08:00 committed by GitHub
parent 7308b1eb00
commit 23c1343fb3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 2 deletions

View File

@ -7451,6 +7451,9 @@ re_scan:
if (frame_csp_tmp->label_type != LABEL_TYPE_LOOP)
ret_count = block_type_get_result_types(
&frame_csp_tmp->block_type, &ret_types);
else
ret_count = block_type_get_param_types(
&frame_csp_tmp->block_type, &ret_types);
}
else {
uint8 *tmp_ret_types = NULL;
@ -7461,6 +7464,9 @@ re_scan:
if (frame_csp_tmp->label_type != LABEL_TYPE_LOOP)
tmp_ret_count = block_type_get_result_types(
&frame_csp_tmp->block_type, &tmp_ret_types);
else
tmp_ret_count = block_type_get_param_types(
&frame_csp_tmp->block_type, &tmp_ret_types);
if (ret_count != tmp_ret_count
|| (ret_count
@ -7753,7 +7759,8 @@ re_scan:
}
if (available_stack_cell > 0) {
if (is_32bit_type(*(loader_ctx->frame_ref - 1))) {
if (is_32bit_type(*(loader_ctx->frame_ref - 1))
|| *(loader_ctx->frame_ref - 1) == VALUE_TYPE_ANY) {
loader_ctx->frame_ref--;
loader_ctx->stack_cell_num--;
#if WASM_ENABLE_FAST_INTERP != 0

View File

@ -6100,7 +6100,8 @@ re_scan:
&& !cur_block->is_stack_polymorphic));
if (available_stack_cell > 0) {
if (is_32bit_type(*(loader_ctx->frame_ref - 1))) {
if (is_32bit_type(*(loader_ctx->frame_ref - 1))
|| *(loader_ctx->frame_ref - 1) == VALUE_TYPE_ANY) {
loader_ctx->frame_ref--;
loader_ctx->stack_cell_num--;
#if WASM_ENABLE_FAST_INTERP != 0