From bafa09a4ae9df0a1eb97847a2c1eb51bfac0de5c Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Thu, 5 Nov 2015 19:18:48 -0800 Subject: divide by 0 --- src/wasm-interpreter.h | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'src') 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)); -- cgit v1.2.3