diff options
-rw-r--r-- | sw/qa/extras/rtfimport/data/fdo64671.rtf | 3 | ||||
-rw-r--r-- | sw/qa/extras/rtfimport/rtfimport.cxx | 8 | ||||
-rw-r--r-- | writerfilter/source/rtftok/rtfdocumentimpl.cxx | 2 |
3 files changed, 12 insertions, 1 deletions
diff --git a/sw/qa/extras/rtfimport/data/fdo64671.rtf b/sw/qa/extras/rtfimport/data/fdo64671.rtf new file mode 100644 index 000000000000..385dca4294f1 --- /dev/null +++ b/sw/qa/extras/rtfimport/data/fdo64671.rtf @@ -0,0 +1,3 @@ +{\rtf1 +\u381\'7d +\par} diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx index bbac4786122f..2e99c2777ccf 100644 --- a/sw/qa/extras/rtfimport/rtfimport.cxx +++ b/sw/qa/extras/rtfimport/rtfimport.cxx @@ -148,6 +148,7 @@ public: void testFdo61193(); void testFdo63023(); void testFdo62977(); + void testFdo64671(); CPPUNIT_TEST_SUITE(Test); #if !defined(MACOSX) && !defined(WNT) @@ -266,6 +267,7 @@ void Test::run() {"hello.rtf", &Test::testFdo61193}, {"fdo63023.rtf", &Test::testFdo63023}, {"fdo62977.rtf", &Test::testFdo62977}, + {"fdo64671.rtf", &Test::testFdo64671}, }; for (unsigned int i = 0; i < SAL_N_ELEMENTS(aMethods); ++i) { @@ -1222,6 +1224,12 @@ void Test::testFdo62977() getRun(getParagraph(1), 1, OUString("\xE5\xB9\xB4\xEF\xBC\x94\xE6\x9C\x88", 9, RTL_TEXTENCODING_UTF8)); } +void Test::testFdo64671() +{ + // Additional '}' was inserted before the special character. + getRun(getParagraph(1), 1, OUString("\xC5\xBD", 2, RTL_TEXTENCODING_UTF8)); +} + CPPUNIT_TEST_SUITE_REGISTRATION(Test); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index 056ac08b60e9..e06bace8cd89 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -879,7 +879,7 @@ int RTFDocumentImpl::resolveChars(char ch) bool bUnicodeChecked = false; bool bSkipped = false; - while(!Strm().IsEof() && ch != '{' && ch != '}' && ch != '\\') + while(!Strm().IsEof() && (m_aStates.top().nInternalState == INTERNAL_HEX || (ch != '{' && ch != '}' && ch != '\\'))) { if (m_aStates.top().nInternalState == INTERNAL_HEX || (ch != 0x0d && ch != 0x0a)) { |