diff options
author | Andreas Heinisch <andreas.heinisch@yahoo.de> | 2020-09-06 09:26:47 +0200 |
---|---|---|
committer | Mike Kaganski <mike.kaganski@collabora.com> | 2020-09-06 12:55:43 +0200 |
commit | 11292d1cc405e7c3b9e1f374cc7581a63a54b994 (patch) | |
tree | 65a3278c8f6e99795538f45642d0e2039ca4c351 /basic | |
parent | 86daf3617f2a5e59507f1e6d9a57ca6d39745db8 (diff) |
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>
Diffstat (limited to 'basic')
-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 9b80c32512d6..7515b0d07862 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(); @@ -1061,6 +1063,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 5d93f5362510..0647a72edfff 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] != '#') { |