summaryrefslogtreecommitdiff
path: root/sal
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2016-10-13 15:07:47 +0200
committerEike Rathke <erack@redhat.com>2016-10-13 15:13:53 +0200
commitb086fd9923e69b7494fd70e8f62b16c83837f7e6 (patch)
tree34e2a8004c6b0da20e51c5bcaafdaadb7270f694 /sal
parent042a7fc229c44fcb7a0c009a1b7f5d34913f8c12 (diff)
approxEqual: check isFinite()
Necessary as all comparisons involving a Nan evaluate to false and the assert() in isRepresentableInteger() was hit by crash test documents where approxEqual() was called with a least one Nan. Change-Id: I9e8f41c36c0cf14cabf47c3df773c601d32682d6
Diffstat (limited to 'sal')
-rw-r--r--sal/rtl/math.cxx2
1 files changed, 2 insertions, 0 deletions
diff --git a/sal/rtl/math.cxx b/sal/rtl/math.cxx
index 9ce10f7c0ff6..95df8205db65 100644
--- a/sal/rtl/math.cxx
+++ b/sal/rtl/math.cxx
@@ -1095,6 +1095,8 @@ bool SAL_CALL rtl_math_approxEqual(double a, double b) SAL_THROW_EXTERN_C()
if (a == 0.0 || b == 0.0)
return false;
const double d = fabs(a - b);
+ if (!rtl::math::isFinite(d))
+ return false; // Nan or Inf involved
if (d > ((a = fabs(a)) * e44) || d > ((b = fabs(b)) * e44))
return false;
if (isRepresentableInteger(d) && isRepresentableInteger(a) && isRepresentableInteger(b))