diff --git a/Userland/Libraries/LibWasm/AbstractMachine/AbstractMachine.cpp b/Userland/Libraries/LibWasm/AbstractMachine/AbstractMachine.cpp index f6ebbc0ed6..65960ad9aa 100644 --- a/Userland/Libraries/LibWasm/AbstractMachine/AbstractMachine.cpp +++ b/Userland/Libraries/LibWasm/AbstractMachine/AbstractMachine.cpp @@ -162,7 +162,8 @@ InstantiationResult AbstractMachine::instantiate(const Module& module, Vectortype().limits().max().value()) }; return; } - instance->grow(data.init.size() + offset - instance->size()); + if (instance->size() < data.init.size() + offset) + instance->grow(data.init.size() + offset - instance->size()); instance->data().overwrite(offset, data.init.data(), data.init.size()); } }, diff --git a/Userland/Libraries/LibWasm/AbstractMachine/AbstractMachine.h b/Userland/Libraries/LibWasm/AbstractMachine/AbstractMachine.h index 01ffc09cb8..42646df276 100644 --- a/Userland/Libraries/LibWasm/AbstractMachine/AbstractMachine.h +++ b/Userland/Libraries/LibWasm/AbstractMachine/AbstractMachine.h @@ -300,7 +300,7 @@ public: explicit MemoryInstance(const MemoryType& type) : m_type(type) { - grow(m_type.limits().min()); + grow(m_type.limits().min() * Constants::page_size); } auto& type() const { return m_type; } diff --git a/Userland/Libraries/LibWasm/AbstractMachine/Interpreter.cpp b/Userland/Libraries/LibWasm/AbstractMachine/Interpreter.cpp index fa3dd06900..27d458b11c 100644 --- a/Userland/Libraries/LibWasm/AbstractMachine/Interpreter.cpp +++ b/Userland/Libraries/LibWasm/AbstractMachine/Interpreter.cpp @@ -80,7 +80,7 @@ ReadonlyBytes Interpreter::load_from_memory(Configuration& configuration, const auto instance_address = base.value() + static_cast(arg.offset); if (instance_address < 0 || static_cast(instance_address + size) > memory->size()) { m_do_trap = true; - dbgln("LibWasm: Memory access out of bounds (expected 0 > {} and {} > {})", instance_address, instance_address + size, memory->size()); + dbgln("LibWasm: Memory access out of bounds (expected 0 <= {} and {} <= {})", instance_address, instance_address + size, memory->size()); return {}; } dbgln_if(WASM_TRACE_DEBUG, "load({} : {}) -> stack", instance_address, size); @@ -98,7 +98,7 @@ void Interpreter::store_to_memory(Configuration& configuration, const Instructio auto instance_address = base.value() + static_cast(arg.offset); if (instance_address < 0 || static_cast(instance_address + data.size()) > memory->size()) { m_do_trap = true; - dbgln("LibWasm: Memory access out of bounds (expected 0 > {} and {} > {})", instance_address, instance_address + data.size(), memory->size()); + dbgln("LibWasm: Memory access out of bounds (expected 0 <= {} and {} <= {})", instance_address, instance_address + data.size(), memory->size()); return; } dbgln_if(WASM_TRACE_DEBUG, "tempoaray({}b) -> store({})", data.size(), instance_address);