aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@qt.io>2017-06-07 12:57:01 +0200
committerLars Knoll <lars.knoll@qt.io>2017-06-08 06:00:56 +0000
commit0a34deef4d824884e73a93400b854399f7fde4ba (patch)
tree67c76f88bbf0d3b25e2ece3afbac4fcbb36bfe99
parente1bd2860cb7ac7e0c7e52a39aeae23882c260112 (diff)
Fix integer division
0/-1 == -0.0 in JS, which cannot be encoded in an int. Change-Id: Ice5b09fa3d42dc24d543d4581d77c6bfa743b2ca Reviewed-by: Simon Hausmann <simon.hausmann@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
-rw-r--r--src/qml/jsruntime/qv4runtime.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/qml/jsruntime/qv4runtime.cpp b/src/qml/jsruntime/qv4runtime.cpp
index 37a2bfdf90..ecf2fd8b11 100644
--- a/src/qml/jsruntime/qv4runtime.cpp
+++ b/src/qml/jsruntime/qv4runtime.cpp
@@ -1706,7 +1706,9 @@ ReturnedValue Runtime::method_div(const Value &left, const Value &right)
if (Value::integerCompatible(left, right)) {
int lval = left.integerValue();
int rval = right.integerValue();
- if (rval != 0 && (lval % rval == 0))
+ if (rval != 0 // division by zero should result in a NaN
+ && (lval % rval == 0) // fractions can't be stored in an int
+ && !(lval == 0 && rval < 0)) // 0 / -something results in -0.0
return Encode(int(lval / rval));
else
return Encode(double(lval) / rval);