diff --git a/source/m3_exec.h b/source/m3_exec.h index 0d55676..7fa7f46 100644 --- a/source/m3_exec.h +++ b/source/m3_exec.h @@ -708,18 +708,24 @@ d_m3Op (MemGrow) IM3Runtime runtime = m3MemRuntime(_mem); IM3Memory memory = & runtime->memory; - u32 numPagesToGrow = (u32) _r0; - _r0 = memory->numPages; + i32 numPagesToGrow = _r0; + if (numPagesToGrow >= 0) { + _r0 = memory->numPages; - if (M3_LIKELY(numPagesToGrow)) + if (M3_LIKELY(numPagesToGrow)) + { + u32 requiredPages = memory->numPages + numPagesToGrow; + + M3Result r = ResizeMemory (runtime, requiredPages); + if (r) + _r0 = -1; + + _mem = memory->mallocated; + } + } + else { - u32 requiredPages = memory->numPages + numPagesToGrow; - - M3Result r = ResizeMemory (runtime, requiredPages); - if (r) - _r0 = -1; - - _mem = memory->mallocated; + _r0 = -1; } nextOp (); diff --git a/test/regression/github-442.wasm b/test/regression/github-442.wasm new file mode 100644 index 0000000..c055a0a Binary files /dev/null and b/test/regression/github-442.wasm differ diff --git a/test/regression/github-442.wat b/test/regression/github-442.wat new file mode 100644 index 0000000..fdce5d5 --- /dev/null +++ b/test/regression/github-442.wat @@ -0,0 +1,7 @@ +(module + (func $to_test (result i32) + i32.const -1 + memory.grow) + (memory 1 5) + (export "to_test" (func $to_test)) +)