From b086fd9923e69b7494fd70e8f62b16c83837f7e6 Mon Sep 17 00:00:00 2001 From: Eike Rathke Date: Thu, 13 Oct 2016 15:07:47 +0200 Subject: [PATCH] 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 --- sal/rtl/math.cxx | 2 ++ 1 file changed, 2 insertions(+) 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))