diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2015-06-22 09:05:30 +0200 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2015-09-28 08:06:48 +0200 |
commit | 2b78f54d06769d42fd73b6bc3240b14097255c34 (patch) | |
tree | c3a6966f6f76bb6db4cd879d374ceb98107be009 | |
parent | e39bcc462a1dedb963b038488fd77f0d020ddc8d (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.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 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; |