mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2025-09-07 02:11:06 +00:00
Fix ref.is_null processing in fast-interp loader (#2971)
This commit is contained in:
parent
2ee013faf3
commit
d818672f62
|
@ -8061,13 +8061,33 @@ re_scan:
|
||||||
case WASM_OP_REF_IS_NULL:
|
case WASM_OP_REF_IS_NULL:
|
||||||
{
|
{
|
||||||
#if WASM_ENABLE_FAST_INTERP != 0
|
#if WASM_ENABLE_FAST_INTERP != 0
|
||||||
if (!wasm_loader_pop_frame_ref_offset(loader_ctx,
|
BranchBlock *cur_block = loader_ctx->frame_csp - 1;
|
||||||
VALUE_TYPE_FUNCREF,
|
int32 block_stack_cell_num =
|
||||||
error_buf, error_buf_size)
|
(int32)(loader_ctx->stack_cell_num
|
||||||
&& !wasm_loader_pop_frame_ref_offset(
|
- cur_block->stack_cell_num);
|
||||||
loader_ctx, VALUE_TYPE_EXTERNREF, error_buf,
|
if (block_stack_cell_num <= 0) {
|
||||||
error_buf_size)) {
|
if (!cur_block->is_stack_polymorphic) {
|
||||||
goto fail;
|
set_error_buf(
|
||||||
|
error_buf, error_buf_size,
|
||||||
|
"type mismatch: expect data but stack was empty");
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (*(loader_ctx->frame_ref - 1) == VALUE_TYPE_FUNCREF
|
||||||
|
|| *(loader_ctx->frame_ref - 1) == VALUE_TYPE_EXTERNREF
|
||||||
|
|| *(loader_ctx->frame_ref - 1) == VALUE_TYPE_ANY) {
|
||||||
|
if (!wasm_loader_pop_frame_ref_offset(
|
||||||
|
loader_ctx, *(loader_ctx->frame_ref - 1),
|
||||||
|
error_buf, error_buf_size)) {
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
set_error_buf(error_buf, error_buf_size,
|
||||||
|
"type mismatch");
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (!wasm_loader_pop_frame_ref(loader_ctx, VALUE_TYPE_FUNCREF,
|
if (!wasm_loader_pop_frame_ref(loader_ctx, VALUE_TYPE_FUNCREF,
|
||||||
|
|
|
@ -6355,13 +6355,33 @@ re_scan:
|
||||||
case WASM_OP_REF_IS_NULL:
|
case WASM_OP_REF_IS_NULL:
|
||||||
{
|
{
|
||||||
#if WASM_ENABLE_FAST_INTERP != 0
|
#if WASM_ENABLE_FAST_INTERP != 0
|
||||||
if (!wasm_loader_pop_frame_ref_offset(loader_ctx,
|
BranchBlock *cur_block = loader_ctx->frame_csp - 1;
|
||||||
VALUE_TYPE_FUNCREF,
|
int32 block_stack_cell_num =
|
||||||
error_buf, error_buf_size)
|
(int32)(loader_ctx->stack_cell_num
|
||||||
&& !wasm_loader_pop_frame_ref_offset(
|
- cur_block->stack_cell_num);
|
||||||
loader_ctx, VALUE_TYPE_EXTERNREF, error_buf,
|
if (block_stack_cell_num <= 0) {
|
||||||
error_buf_size)) {
|
if (!cur_block->is_stack_polymorphic) {
|
||||||
goto fail;
|
set_error_buf(
|
||||||
|
error_buf, error_buf_size,
|
||||||
|
"type mismatch: expect data but stack was empty");
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (*(loader_ctx->frame_ref - 1) == VALUE_TYPE_FUNCREF
|
||||||
|
|| *(loader_ctx->frame_ref - 1) == VALUE_TYPE_EXTERNREF
|
||||||
|
|| *(loader_ctx->frame_ref - 1) == VALUE_TYPE_ANY) {
|
||||||
|
if (!wasm_loader_pop_frame_ref_offset(
|
||||||
|
loader_ctx, *(loader_ctx->frame_ref - 1),
|
||||||
|
error_buf, error_buf_size)) {
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
set_error_buf(error_buf, error_buf_size,
|
||||||
|
"type mismatch");
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (!wasm_loader_pop_frame_ref(loader_ctx, VALUE_TYPE_FUNCREF,
|
if (!wasm_loader_pop_frame_ref(loader_ctx, VALUE_TYPE_FUNCREF,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user