Skip to content

Commit 3cf5d5f

Browse files
committed
Add overflow check for preserved local offset in preserve_referenced_local
1 parent c883faf commit 3cf5d5f

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

core/iwasm/interpreter/wasm_loader.c

+9
Original file line numberDiff line numberDiff line change
@@ -9197,6 +9197,15 @@ preserve_referenced_local(WASMLoaderContext *loader_ctx, uint8 opcode,
91979197
loader_ctx->preserved_local_offset += 2;
91989198
emit_label(EXT_OP_COPY_STACK_TOP_I64);
91999199
}
9200+
9201+
/* overflow */
9202+
if (preserved_offset > loader_ctx->preserved_local_offset) {
9203+
set_error_buf_v(error_buf, error_buf_size,
9204+
"too much local cells 0x%x",
9205+
loader_ctx->preserved_local_offset);
9206+
return false;
9207+
}
9208+
92009209
emit_operand(loader_ctx, local_index);
92019210
emit_operand(loader_ctx, preserved_offset);
92029211
emit_label(opcode);

core/iwasm/interpreter/wasm_mini_loader.c

+5
Original file line numberDiff line numberDiff line change
@@ -4778,6 +4778,11 @@ preserve_referenced_local(WASMLoaderContext *loader_ctx, uint8 opcode,
47784778
loader_ctx->preserved_local_offset += 2;
47794779
emit_label(EXT_OP_COPY_STACK_TOP_I64);
47804780
}
4781+
4782+
/* overflow */
4783+
bh_assert(preserved_offset
4784+
> loader_ctx->preserved_local_offset);
4785+
47814786
emit_operand(loader_ctx, local_index);
47824787
emit_operand(loader_ctx, preserved_offset);
47834788
emit_label(opcode);

0 commit comments

Comments
 (0)