From 1977ad23efb3b3f2d4ae0ddf49096a05464f488f Mon Sep 17 00:00:00 2001 From: Xu Jun Date: Fri, 19 Jan 2024 19:58:12 +0800 Subject: [PATCH] fast-interp: Fix dynamic offset error issue in else branch (#3058) Reported in https://github.com/bytecodealliance/wasm-micro-runtime/issues/3026. --- core/iwasm/interpreter/wasm_loader.c | 9 +++++++++ core/iwasm/interpreter/wasm_mini_loader.c | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/core/iwasm/interpreter/wasm_loader.c b/core/iwasm/interpreter/wasm_loader.c index f02f23d83..2f98d0277 100644 --- a/core/iwasm/interpreter/wasm_loader.c +++ b/core/iwasm/interpreter/wasm_loader.c @@ -7400,6 +7400,15 @@ re_scan: bh_memcpy_s(loader_ctx->frame_offset, size, block->param_frame_offsets, size); loader_ctx->frame_offset += (size / sizeof(int16)); + + /* recover dynamic offset */ + for (i = 0; i < block->available_param_num; i++) { + if (block->param_frame_offsets[i] + >= loader_ctx->dynamic_offset) { + loader_ctx->dynamic_offset = + block->param_frame_offsets[i] + 1; + } + } } #endif diff --git a/core/iwasm/interpreter/wasm_mini_loader.c b/core/iwasm/interpreter/wasm_mini_loader.c index b6d81aa2f..857212e17 100644 --- a/core/iwasm/interpreter/wasm_mini_loader.c +++ b/core/iwasm/interpreter/wasm_mini_loader.c @@ -5813,6 +5813,15 @@ re_scan: bh_memcpy_s(loader_ctx->frame_offset, size, block->param_frame_offsets, size); loader_ctx->frame_offset += (size / sizeof(int16)); + + /* recover dynamic offset */ + for (i = 0; i < block->available_param_num; i++) { + if (block->param_frame_offsets[i] + >= loader_ctx->dynamic_offset) { + loader_ctx->dynamic_offset = + block->param_frame_offsets[i] + 1; + } + } } #endif