Răsfoiți Sursa

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 ani în urmă
părinte
comite
1977ad23ef

+ 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