diff options
-rw-r--r-- | src/wasm-interpreter.h | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h index 7b8812d69..8277ec579 100644 --- a/src/wasm-interpreter.h +++ b/src/wasm-interpreter.h @@ -369,8 +369,14 @@ public: case Add: return Flow(Literal(l + r)); case Sub: return Flow(Literal(l - r)); case Mul: return Flow(Literal(l * r)); - case DivS: return Flow(Literal(l / r)); - case DivU: return Flow(Literal(int32_t(uint32_t(l) / uint32_t(r)))); + case DivS: { + if (r == 0) trap(); + return Flow(Literal(l / r)); + } + case DivU: { + if (r == 0) trap(); + return Flow(Literal(int32_t(uint32_t(l) / uint32_t(r)))); + } case RemS: return Flow(Literal(l % r)); case RemU: return Flow(Literal(int32_t(uint32_t(l) % uint32_t(r)))); case And: return Flow(Literal(l & r)); @@ -387,8 +393,14 @@ public: case Add: return Flow(Literal(l + r)); case Sub: return Flow(Literal(l - r)); case Mul: return Flow(Literal(l * r)); - case DivS: return Flow(Literal(l / r)); - case DivU: return Flow(Literal(int64_t(uint64_t(l) / uint64_t(r)))); + case DivS: { + if (r == 0) trap(); + return Flow(Literal(l / r)); + } + case DivU: { + if (r == 0) trap(); + return Flow(Literal(int32_t(uint32_t(l) / uint32_t(r)))); + } case RemS: return Flow(Literal(l % r)); case RemU: return Flow(Literal(int64_t(uint64_t(l) % uint64_t(r)))); case And: return Flow(Literal(l & r)); |