summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2015-06-22 09:05:30 +0200
committerAndras Timar <andras.timar@collabora.com>2015-09-28 08:06:48 +0200
commit2b78f54d06769d42fd73b6bc3240b14097255c34 (patch)
treec3a6966f6f76bb6db4cd879d374ceb98107be009
parente39bcc462a1dedb963b038488fd77f0d020ddc8d (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 Reviewed-on: https://gerrit.libreoffice.org/16501 Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com> (cherry picked from commit 326ca9e0710d17274eb0a6cdc0d95d4f933784f0) Conflicts: writerfilter/source/rtftok/rtfdocumentimpl.cxx Change-Id: I6df476b2d6397dfa918111b33854dc2f95fbe81d
-rw-r--r--sw/qa/extras/rtfimport/data/tdf92061.rtf5
-rw-r--r--sw/qa/extras/rtfimport/rtfimport.cxx6
-rw-r--r--writerfilter/source/rtftok/rtfdocumentimpl.cxx2
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 24dee2b630d9..1eb7ca6cbef0 100644
--- a/sw/qa/extras/rtfimport/rtfimport.cxx
+++ b/sw/qa/extras/rtfimport/rtfimport.cxx
@@ -2125,6 +2125,12 @@ DECLARE_RTFIMPORT_TEST(testFdo75614, "tdf75614.rtf")
CPPUNIT_ASSERT_EQUAL(OUString("after."), getRun(getParagraph(1), 3)->getString());
}
+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 f00c49cf4d38..be1eae9052a4 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -1664,11 +1664,13 @@ int 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;