diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/wasm-interpreter.h | 2 | ||||
-rw-r--r-- | src/wasm-shell.cpp | 5 |
2 files changed, 3 insertions, 4 deletions
diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h index 5483271c3..e69e9c9aa 100644 --- a/src/wasm-interpreter.h +++ b/src/wasm-interpreter.h @@ -648,7 +648,7 @@ private: case GrowMemory: { Flow flow = visit(curr->operands[0]); if (flow.breaking()) return flow; - size_t newSize = flow.value.getInteger(); + size_t newSize = instance.memorySize + flow.value.getInteger(); if (newSize > instance.wasm.memory.max) trap(); instance.externalInterface->growMemory(instance.memorySize, newSize); instance.memorySize = newSize; diff --git a/src/wasm-shell.cpp b/src/wasm-shell.cpp index 8577b827e..26ce56e8e 100644 --- a/src/wasm-shell.cpp +++ b/src/wasm-shell.cpp @@ -28,7 +28,7 @@ struct ShellExternalInterface : ModuleInstance::ExternalInterface { ShellExternalInterface() : memory(nullptr) {} void init(Module& wasm) override { - memory = new char[wasm.memory.initial]; + memory = (char*)malloc(wasm.memory.initial); // apply memory segments for (auto segment : wasm.memory.segments) { memcpy(memory + segment.offset, segment.data, segment.size); @@ -103,8 +103,7 @@ struct ShellExternalInterface : ModuleInstance::ExternalInterface { } void growMemory(size_t oldSize, size_t newSize) override { - delete memory; - memory = new char[newSize]; + memory = (char*)realloc(memory, newSize); } jmp_buf trapState; |