diff options
author | Eike Rathke <erack@redhat.com> | 2018-11-30 20:06:24 +0100 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2018-12-01 01:10:25 +0100 |
commit | a4146c38a07ff51b37d40c2e953f54b0a746a8b7 (patch) | |
tree | 02a8a1328d6d657a1e3b1f5aac4c08f87e690a8b /sal | |
parent | 7f66a340933339974b5c6d70af4ae3c17e4f001a (diff) |
A leading or trailing group separator character is not a group separator
Also a group separator character followed by a non-digit is not.
Change-Id: Id57e43fe7692706c5532fb05ad394224265c2750
Reviewed-on: https://gerrit.libreoffice.org/64358
Tested-by: Jenkins
Reviewed-by: Eike Rathke <erack@redhat.com>
Diffstat (limited to 'sal')
-rw-r--r-- | sal/rtl/math.cxx | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/sal/rtl/math.cxx b/sal/rtl/math.cxx index 14b0577532ab..46b7ef88f3d0 100644 --- a/sal/rtl/math.cxx +++ b/sal/rtl/math.cxx @@ -811,8 +811,12 @@ double stringToDouble(CharT const * pBegin, CharT const * pEnd, if (!bDone) // do not recognize e.g. NaN1.23 { - // leading zeros and group separators may be safely ignored - while (p != pEnd && (*p == CharT('0') || *p == cGroupSeparator)) + // Leading zeros and group separators between digits may be safely + // ignored. p0 < p implies that there was a leading 0 already, + // consecutive group separators may not happen as *(p+1) is checked for + // digit. + while (p != pEnd && (*p == CharT('0') || (*p == cGroupSeparator + && p0 < p && p+1 < pEnd && rtl::isAsciiDigit(*(p+1))))) { ++p; } @@ -833,6 +837,12 @@ double stringToDouble(CharT const * pBegin, CharT const * pEnd, { break; } + else if (p == p0 || (p+1 == pEnd) || !rtl::isAsciiDigit(*(p+1))) + { + // A leading or trailing (not followed by a digit) group + // separator character is not a group separator. + break; + } } // fraction part of mantissa |