summaryrefslogtreecommitdiff
path: root/src/wasm-interpreter.h
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2015-11-05 19:18:48 -0800
committerAlon Zakai <alonzakai@gmail.com>2015-11-05 19:18:48 -0800
commitbafa09a4ae9df0a1eb97847a2c1eb51bfac0de5c (patch)
treeb51cd002d8f3cee28fbc73de2a02b6f6bdd22a35 /src/wasm-interpreter.h
parent72b5a8e5effd9043f1e868e399ef84648a869a15 (diff)
downloadbinaryen-bafa09a4ae9df0a1eb97847a2c1eb51bfac0de5c.tar.gz
binaryen-bafa09a4ae9df0a1eb97847a2c1eb51bfac0de5c.tar.bz2
binaryen-bafa09a4ae9df0a1eb97847a2c1eb51bfac0de5c.zip
divide by 0
Diffstat (limited to 'src/wasm-interpreter.h')
-rw-r--r--src/wasm-interpreter.h20
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));