瀏覽代碼

fast-interp: Fix dynamic offset error issue in else branch (#3058)

Reported in https://github.com/bytecodealliance/wasm-micro-runtime/issues/3026.
Xu Jun 2 年之前
父節點
當前提交
1977ad23ef
共有 2 個文件被更改,包括 18 次插入0 次删除
  1. 9 0
      core/iwasm/interpreter/wasm_loader.c
  2. 9 0
      core/iwasm/interpreter/wasm_mini_loader.c

+ 9 - 0
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
 

+ 9 - 0
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