summaryrefslogtreecommitdiff
path: root/sal/rtl/math.cxx
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2013-10-14 14:55:23 +0200
committerEike Rathke <erack@redhat.com>2013-10-14 14:57:38 +0200
commitf20feba4c43c34fd2ee05b4658b0de0248c08eb9 (patch)
tree7e31618e4f1ca695eb0eab076b131db7fa6b8ced /sal/rtl/math.cxx
parent241454c424b31aa9810b95072122d629fe3a9b8f (diff)
resolved fdo#70319 exponent must be followed by at least one digit
Change-Id: Icdd22fa0f1efcdd18cfea7cb48e1cbf2cf8d3533
Diffstat (limited to 'sal/rtl/math.cxx')
-rw-r--r--sal/rtl/math.cxx6
1 files changed, 6 insertions, 0 deletions
diff --git a/sal/rtl/math.cxx b/sal/rtl/math.cxx
index 590ea0ee46b0..f66039a4a3ad 100644
--- a/sal/rtl/math.cxx
+++ b/sal/rtl/math.cxx
@@ -799,6 +799,7 @@ inline double stringToDouble(CharT const * pBegin, CharT const * pEnd,
// Exponent
if (p != p0 && p != pEnd && (*p == CharT('E') || *p == CharT('e')))
{
+ CharT const * const pExponent = p;
++p;
bool bExpSign;
if (p != pEnd && *p == CharT('-'))
@@ -812,6 +813,7 @@ inline double stringToDouble(CharT const * pBegin, CharT const * pEnd,
if (p != pEnd && *p == CharT('+'))
++p;
}
+ CharT const * const pFirstExpDigit = p;
if ( fVal == 0.0 )
{ // no matter what follows, zero stays zero, but carry on the
// offset
@@ -857,6 +859,10 @@ inline double stringToDouble(CharT const * pBegin, CharT const * pEnd,
else
fVal = rtl::math::pow10Exp( fVal, nExp ); // normal
}
+ else if (p == pFirstExpDigit)
+ { // no digits in exponent, reset end of scan
+ p = pExponent;
+ }
}
}
else if (p - p0 == 2 && p != pEnd && p[0] == CharT('#')