diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2015-06-22 09:05:30 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2015-06-22 11:12:15 +0200 |
commit | 99db209005634a7342d7043485cdbef5b510e199 (patch) | |
tree | f85bf496a5aac60ebad7a1bf3d213b676fffad7a | |
parent | e0400fdde45f432057091833cfd5b4daba7553ae (diff) |
tdf#92061 RTF import: fix missing body text after footnote
A missing seek in the \footnote handler could result in a situation that
the missed text contained a "{" but not its matching "}", which resulted
in the parser terminating earlier than the end of the document.
(cherry picked from commit 7b08304b55cf2284a3c583426c60baef618ba206)
Conflicts:
sw/qa/extras/rtfimport/rtfimport.cxx
Change-Id: I6df476b2d6397dfa918111b33854dc2f95fbe81d
-rw-r--r-- | sw/qa/extras/rtfimport/data/tdf92061.rtf | 5 | ||||
-rw-r--r-- | sw/qa/extras/rtfimport/rtfimport.cxx | 6 | ||||
-rw-r--r-- | writerfilter/source/rtftok/rtfdocumentimpl.cxx | 2 |
3 files changed, 13 insertions, 0 deletions
diff --git a/sw/qa/extras/rtfimport/data/tdf92061.rtf b/sw/qa/extras/rtfimport/data/tdf92061.rtf new file mode 100644 index 000000000000..03978b483673 --- /dev/null +++ b/sw/qa/extras/rtfimport/data/tdf92061.rtf @@ -0,0 +1,5 @@ +{\rtf1 +body-before +{\footnote AAAAA {B} C} +body-after\par +} diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx index 86dddfc339fa..808a86c51e1c 100644 --- a/sw/qa/extras/rtfimport/rtfimport.cxx +++ b/sw/qa/extras/rtfimport/rtfimport.cxx @@ -2301,6 +2301,12 @@ DECLARE_RTFIMPORT_TEST(testTdf90315, "tdf90315.rtf") CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1270), getProperty<sal_Int32>(xTextSection->getPropertyValue("TextColumns"), "AutomaticDistance")); } +DECLARE_RTFIMPORT_TEST(testTdf92061, "tdf92061.rtf") +{ + // This was "C", i.e. part of the footnote ended up in the body text. + CPPUNIT_ASSERT_EQUAL(OUString("body-after"), getRun(getParagraph(1), 3)->getString()); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index b351bef227b9..8a68e6d10090 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -1683,11 +1683,13 @@ RTFError RTFDocumentImpl::dispatchDestination(RTFKeyword nKeyword) // Check if this is an endnote. OStringBuffer aBuf; char ch; + sal_Size nCurrent = Strm().Tell(); for (int i = 0; i < 7; ++i) { Strm().ReadChar(ch); aBuf.append(ch); } + Strm().Seek(nCurrent); OString aKeyword = aBuf.makeStringAndClear(); if (aKeyword.equals("\\ftnalt")) nId = NS_ooxml::LN_endnote; |