diff options
-rw-r--r-- | src/c-writer.cc | 10 | ||||
-rw-r--r-- | test/wasm2c/address-overflow.txt | 12 |
2 files changed, 17 insertions, 5 deletions
diff --git a/src/c-writer.cc b/src/c-writer.cc index 98a683c6..ba7e5c4a 100644 --- a/src/c-writer.cc +++ b/src/c-writer.cc @@ -2080,10 +2080,10 @@ void CWriter::Write(const LoadExpr& expr) { Type result_type = expr.opcode.GetResultType(); Write(StackVar(0, result_type), " = ", func, "(", ExternalPtr(memory->name), - ", (u64)(", StackVar(0)); + ", (u64)(", StackVar(0), ")"); if (expr.offset != 0) - Write(" + ", expr.offset); - Write("));", Newline()); + Write(" + ", expr.offset, "u"); + Write(");", Newline()); DropTypes(1); PushType(result_type); } @@ -2108,10 +2108,10 @@ void CWriter::Write(const StoreExpr& expr) { assert(module_->memories.size() == 1); Memory* memory = module_->memories[0]; - Write(func, "(", ExternalPtr(memory->name), ", (u64)(", StackVar(1)); + Write(func, "(", ExternalPtr(memory->name), ", (u64)(", StackVar(1), ")"); if (expr.offset != 0) Write(" + ", expr.offset); - Write("), ", StackVar(0), ");", Newline()); + Write(", ", StackVar(0), ");", Newline()); DropTypes(2); } diff --git a/test/wasm2c/address-overflow.txt b/test/wasm2c/address-overflow.txt new file mode 100644 index 00000000..c32a52a8 --- /dev/null +++ b/test/wasm2c/address-overflow.txt @@ -0,0 +1,12 @@ +;;; TOOL: run-spec-wasm2c +(module + (memory 1) + (func (export "test") (param i32) + local.get 0 + i32.load8_u offset=1 + drop) +) +(assert_trap (invoke "test" (i32.const -1)) "out of bounds memory access") +(;; STDOUT ;;; +1/1 tests passed. +;;; STDOUT ;;) |