diff options
author | Andreas Heinisch <andreas.heinisch@yahoo.de> | 2020-09-06 09:26:47 +0200 |
---|---|---|
committer | Xisco Fauli <xiscofauli@libreoffice.org> | 2020-09-10 12:51:51 +0200 |
commit | 3c36d4921cf9d9c4fd33b3e1dd810f7a63d51695 (patch) | |
tree | 77f279630f6ba2e93daeab306df54bb632e68f3e | |
parent | tdf#124470: Split export of table autostyles out from collection phase (diff) | |
download | core-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.cxx | 17 | ||||
-rw-r--r-- | basic/source/comp/scanner.cxx | 3 |
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] != '#') { |