summaryrefslogtreecommitdiff
path: root/src/shell-interface.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/shell-interface.h')
-rw-r--r--src/shell-interface.h12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/shell-interface.h b/src/shell-interface.h
index e41d9de24..0a98ce05a 100644
--- a/src/shell-interface.h
+++ b/src/shell-interface.h
@@ -95,8 +95,10 @@ struct ShellExternalInterface final : ModuleInstance::ExternalInterface {
memory.resize(wasm.memory.initial * wasm::Memory::kPageSize);
// apply memory segments
for (auto& segment : wasm.memory.segments) {
- Address offset = ConstantExpressionRunner<TrivialGlobalManager>(instance.globals).visit(segment.offset).value.geti32();
- assert(offset + segment.data.size() <= wasm.memory.initial * wasm::Memory::kPageSize);
+ Address offset = (uint32_t)ConstantExpressionRunner<TrivialGlobalManager>(instance.globals).visit(segment.offset).value.geti32();
+ if (offset + segment.data.size() > wasm.memory.initial * wasm::Memory::kPageSize) {
+ trap("invalid offset when initializing memory");
+ }
for (size_t i = 0; i != segment.data.size(); ++i) {
memory.set(offset + i, segment.data[i]);
}
@@ -104,8 +106,10 @@ struct ShellExternalInterface final : ModuleInstance::ExternalInterface {
table.resize(wasm.table.initial);
for (auto& segment : wasm.table.segments) {
- Address offset = ConstantExpressionRunner<TrivialGlobalManager>(instance.globals).visit(segment.offset).value.geti32();
- assert(offset + segment.data.size() <= wasm.table.initial);
+ Address offset = (uint32_t)ConstantExpressionRunner<TrivialGlobalManager>(instance.globals).visit(segment.offset).value.geti32();
+ if (offset + segment.data.size() > wasm.table.initial) {
+ trap("invalid offset when initializing table");
+ }
for (size_t i = 0; i != segment.data.size(); ++i) {
table[offset + i] = segment.data[i];
}