Kaydet (Commit) a4146c38 authored tarafından Eike Rathke's avatar Eike Rathke

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: 's avatarEike Rathke <erack@redhat.com>
üst 7f66a340
...@@ -822,8 +822,18 @@ void cclass_Unicode::parseText( ParseResult& r, const OUString& rText, sal_Int32 ...@@ -822,8 +822,18 @@ void cclass_Unicode::parseText( ParseResult& r, const OUString& rText, sal_Int32
if ( nMask & ParserFlags::VALUE ) if ( nMask & ParserFlags::VALUE )
{ {
if (current == cGroupSep) if (current == cGroupSep)
nParseTokensType |= KParseTokens::GROUP_SEPARATOR_IN_NUMBER; {
if ((current == cDecimalSep || (bDecSepAltUsed = (cDecimalSepAlt && current == cDecimalSepAlt))) && if (getFlags(nextChar) & ParserFlags::VALUE_DIGIT)
nParseTokensType |= KParseTokens::GROUP_SEPARATOR_IN_NUMBER;
else
{
// Trailing group separator character is not a
// group separator.
eState = ssStopBack;
}
}
else if ((current == cDecimalSep ||
(bDecSepAltUsed = (cDecimalSepAlt && current == cDecimalSepAlt))) &&
++nDecSeps > 1) ++nDecSeps > 1)
{ {
if (nCodePoints == 2) if (nCodePoints == 2)
......
...@@ -811,8 +811,12 @@ double stringToDouble(CharT const * pBegin, CharT const * pEnd, ...@@ -811,8 +811,12 @@ double stringToDouble(CharT const * pBegin, CharT const * pEnd,
if (!bDone) // do not recognize e.g. NaN1.23 if (!bDone) // do not recognize e.g. NaN1.23
{ {
// leading zeros and group separators may be safely ignored // Leading zeros and group separators between digits may be safely
while (p != pEnd && (*p == CharT('0') || *p == cGroupSeparator)) // 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; ++p;
} }
...@@ -833,6 +837,12 @@ double stringToDouble(CharT const * pBegin, CharT const * pEnd, ...@@ -833,6 +837,12 @@ double stringToDouble(CharT const * pBegin, CharT const * pEnd,
{ {
break; 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 // fraction part of mantissa
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment