summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakeshi Abe <tabe@fixedpoint.jp>2016-04-20 20:00:32 +0900
committerTakeshi Abe <tabe@fixedpoint.jp>2016-04-27 23:40:37 +0000
commit615e3502c5217585501dac27318a2f22847a5605 (patch)
treee7beeccdc91c7bbd5f343caf53002a14fb77ac82
parenta7bd0355cc45ab6d77579c6604a835a5fd0e96cb (diff)
Resolves: tdf#88320 parsing fails with a subscript number
... ending with comma and followed by non-space. Change-Id: Ia00c662e31940270690c64e1840417436565a6c7 Reviewed-on: https://gerrit.libreoffice.org/24260 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Takeshi Abe <tabe@fixedpoint.jp>
-rw-r--r--starmath/qa/cppunit/test_nodetotextvisitors.cxx3
-rw-r--r--starmath/source/parse.cxx8
2 files changed, 11 insertions, 0 deletions
diff --git a/starmath/qa/cppunit/test_nodetotextvisitors.cxx b/starmath/qa/cppunit/test_nodetotextvisitors.cxx
index b0dfaf536971..ffa3f599f932 100644
--- a/starmath/qa/cppunit/test_nodetotextvisitors.cxx
+++ b/starmath/qa/cppunit/test_nodetotextvisitors.cxx
@@ -658,6 +658,9 @@ void Test::testMiscEquivalent()
// check non-BMP Unicode char
ParseAndCompare("{\xf0\x9d\x91\x8e}", "\xf0\x9d\x91\x8e", "non-BMP variable in brace");
ParseAndCompare("{ \xf0\x9d\x91\x8e }", "\xf0\x9d\x91\x8e", "non-BMP variable in brace");
+
+ // tdf#88320
+ ParseAndCompare("A_1,B_2", "A_{1},B_2", "Comma between a digit and non-digit delimits subscript");
}
void Test::testParser()
diff --git a/starmath/source/parse.cxx b/starmath/source/parse.cxx
index ada838aeffa2..6a7d76b5f02e 100644
--- a/starmath/source/parse.cxx
+++ b/starmath/source/parse.cxx
@@ -460,6 +460,14 @@ void SmParser::NextToken()
}
else if (aRes.TokenType & KParseType::ANY_NUMBER)
{
+ assert(aRes.EndPos > 0);
+ if ( m_aBufferString[aRes.EndPos-1] == ',' &&
+ aRes.EndPos < nBufLen &&
+ aCC.getType( m_aBufferString, aRes.EndPos ) != UnicodeType::SPACE_SEPARATOR )
+ {
+ // Comma followed by a non-space char is unlikely for decimal/thousands separator.
+ --aRes.EndPos;
+ }
sal_Int32 n = aRes.EndPos - nRealStart;
OSL_ENSURE( n >= 0, "length < 0" );
m_aCurToken.eType = TNUMBER;