summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Heinisch <andreas.heinisch@yahoo.de>2020-09-06 09:26:47 +0200
committerXisco Fauli <xiscofauli@libreoffice.org>2020-09-10 12:51:51 +0200
commit3c36d4921cf9d9c4fd33b3e1dd810f7a63d51695 (patch)
tree77f279630f6ba2e93daeab306df54bb632e68f3e
parenttdf#124470: Split export of table autostyles out from collection phase (diff)
downloadcore-3c36d4921cf9d9c4fd33b3e1dd810f7a63d51695.tar.gz
core-3c36d4921cf9d9c4fd33b3e1dd810f7a63d51695.zip
tdf#136032 - abort scan of a string beginning with a hashtag
Abort scan of a string beginning with a hashtag, if a comma is found. Otherwise, the compiler raises a syntax error. If the string ends with a hashtag too, it will be parsed later checking for a date literal. Change-Id: I078a2302f5c65206367a00fbc584ffa7b9ede031 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102099 Tested-by: Mike Kaganski <mike.kaganski@collabora.com> Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com> (cherry picked from commit 11292d1cc405e7c3b9e1f374cc7581a63a54b994) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/101973 Tested-by: Jenkins Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org> (cherry picked from commit cc17346d682d85b6c083d76cae2d55dcc022e58f) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102120
-rw-r--r--basic/qa/cppunit/test_scanner.cxx17
-rw-r--r--basic/source/comp/scanner.cxx3
2 files changed, 19 insertions, 1 deletions
diff --git a/basic/qa/cppunit/test_scanner.cxx b/basic/qa/cppunit/test_scanner.cxx
index 42cd637cbd44..b5f14bc57691 100644
--- a/basic/qa/cppunit/test_scanner.cxx
+++ b/basic/qa/cppunit/test_scanner.cxx
@@ -46,6 +46,7 @@ namespace
void testDataType();
void testHexOctal();
void testTdf103104();
+ void testTdf136032();
// Adds code needed to register the test suite
CPPUNIT_TEST_SUITE(ScannerTest);
@@ -62,6 +63,7 @@ namespace
CPPUNIT_TEST(testDataType);
CPPUNIT_TEST(testHexOctal);
CPPUNIT_TEST(testTdf103104);
+ CPPUNIT_TEST(testTdf136032);
// End of test suite definition
CPPUNIT_TEST_SUITE_END();
@@ -959,6 +961,21 @@ namespace
CPPUNIT_ASSERT_EQUAL(cr, symbols[3].text);
}
+ void ScannerTest::testTdf136032()
+ {
+ std::vector<Symbol> symbols;
+ sal_Int32 errors;
+
+ // tdf#136032 - abort scan of a string beginning with a hashtag,
+ // if a comma/whitespace is found. Otherwise, the compiler raises a syntax error.
+ symbols = getSymbols("Print #i,\"A#B\"", errors);
+ CPPUNIT_ASSERT_EQUAL(size_t(5), symbols.size());
+ CPPUNIT_ASSERT_EQUAL(0u, static_cast<unsigned int>(errors));
+ symbols = getSymbols("Print #i, \"A#B\"", errors);
+ CPPUNIT_ASSERT_EQUAL(size_t(5), symbols.size());
+ CPPUNIT_ASSERT_EQUAL(0u, static_cast<unsigned int>(errors));
+ }
+
// Put the test suite in the registry
CPPUNIT_TEST_SUITE_REGISTRATION(ScannerTest);
} // namespace
diff --git a/basic/source/comp/scanner.cxx b/basic/source/comp/scanner.cxx
index 7c192b3a0107..7c5a0d7b265d 100644
--- a/basic/source/comp/scanner.cxx
+++ b/basic/source/comp/scanner.cxx
@@ -251,7 +251,8 @@ bool SbiScanner::NextSym()
do
{
nLineTempIdx++;
- } while (nLineTempIdx < aLine.getLength() && !BasicCharClass::isWhitespace(aLine[nLineTempIdx]) && aLine[nLineTempIdx] != '#');
+ } while (nLineTempIdx < aLine.getLength() && !BasicCharClass::isWhitespace(aLine[nLineTempIdx])
+ && aLine[nLineTempIdx] != '#' && aLine[nLineTempIdx] != ',');
// leave it if it is a date literal - it will be handled later
if (nLineTempIdx >= aLine.getLength() || aLine[nLineTempIdx] != '#')
{