[Libreoffice-commits] core.git: sw/qa writerfilter/source

László Németh (via logerrit) logerrit at kemper.freedesktop.org
Tue Jul 20 11:52:01 UTC 2021


 sw/qa/extras/ooxmlexport/data/tdf143399.docx    |binary
 sw/qa/extras/ooxmlexport/ooxmlexport14.cxx      |   17 +++++++++++++++++
 writerfilter/source/ooxml/OOXMLDocumentImpl.cxx |   15 ++++++++-------
 writerfilter/source/ooxml/OOXMLDocumentImpl.hxx |    3 ++-
 4 files changed, 27 insertions(+), 8 deletions(-)

New commits:
commit 732b08b22eee2682351a9295be29188852fb0489
Author:     László Németh <nemeth at numbertext.org>
AuthorDate: Tue Jul 20 09:51:47 2021 +0200
Commit:     László Németh <nemeth at numbertext.org>
CommitDate: Tue Jul 20 13:51:24 2021 +0200

    tdf#143399 DOCX import: fix lost endnotes or footnotes
    
    in a document containing both of them.
    
    Regression from commit 7dd8f8aace536a8e60e87e61ee1d90d61fba15eb
    "tdf#120351 DOCX import: fix slow endnote import".
    
    Change-Id: I0fe764f3b48dd2688afa4b7cf0ee6658737ef9fe
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119239
    Tested-by: László Németh <nemeth at numbertext.org>
    Reviewed-by: László Németh <nemeth at numbertext.org>

diff --git a/sw/qa/extras/ooxmlexport/data/tdf143399.docx b/sw/qa/extras/ooxmlexport/data/tdf143399.docx
new file mode 100644
index 000000000000..191e46f36bb1
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf143399.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx
index e383984c1170..9944636960c0 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx
@@ -1160,6 +1160,23 @@ DECLARE_OOXMLEXPORT_EXPORTONLY_TEST(testTdf141548, "tdf141548.docx")
     assertXPathContent(pXml, "/w:endnotes/w:endnote[4]/w:p/w:r[2]/w:t[2]", "new line");
 }
 
+DECLARE_OOXMLEXPORT_EXPORTONLY_TEST(testTdf143399, "tdf143399.docx")
+{
+    xmlDocUniquePtr pXml = parseExport("word/footnotes.xml");
+    CPPUNIT_ASSERT(pXml);
+    // These were 0 (lost text content of documents both with footnotes and endnotes)
+    assertXPath(pXml, "/w:footnotes/w:footnote[3]/w:p/w:r[3]/w:t", 1);
+    assertXPathContent(pXml, "/w:footnotes/w:footnote[3]/w:p/w:r[3]/w:t", "Footnotes_graphic2");
+    assertXPath(pXml, "/w:footnotes/w:footnote[4]/w:p/w:r[3]/w:t", 1);
+    assertXPathContent(pXml, "/w:footnotes/w:footnote[4]/w:p/w:r[3]/w:t", "Footnotes_grahic");
+
+    xmlDocUniquePtr pXml2 = parseExport("word/endnotes.xml");
+    CPPUNIT_ASSERT(pXml);
+    // This was 0 (lost text content of the run with endnoteRef)
+    assertXPath(pXml2, "/w:endnotes/w:endnote[3]/w:p/w:r[3]/w:t", 1);
+    assertXPathContent(pXml2, "/w:endnotes/w:endnote[3]/w:p/w:r[3]/w:t[1]", "Endnotes");
+}
+
 DECLARE_OOXMLEXPORT_TEST(testContSectBreakHeaderFooter, "cont-sect-break-header-footer.docx")
 {
     // Load a document with a continuous section break on page 2.
diff --git a/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx b/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx
index be397048df0f..00228fb37a46 100644
--- a/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx
+++ b/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx
@@ -53,7 +53,8 @@ namespace writerfilter::ooxml
 OOXMLDocumentImpl::OOXMLDocumentImpl(OOXMLStream::Pointer_t const & pStream, const uno::Reference<task::XStatusIndicator>& xStatusIndicator, bool bSkipImages, const uno::Sequence<beans::PropertyValue>& rDescriptor)
     : mpStream(pStream)
     , mxStatusIndicator(xStatusIndicator)
-    , mpXNoteStream()
+    , mpXFootnoteStream()
+    , mpXEndnoteStream()
     , mnXNoteId(0)
     , mbIsSubstream(false)
     , mbSkipImages(bSkipImages)
@@ -271,8 +272,8 @@ void OOXMLDocumentImpl::resolveFootnote(Stream & rStream,
                                         Id aType,
                                         const sal_Int32 nNoteId)
 {
-    if (!mpXNoteStream)
-        mpXNoteStream = getXNoteStream(OOXMLStream::FOOTNOTES, nNoteId);
+    if (!mpXFootnoteStream)
+        mpXFootnoteStream = getXNoteStream(OOXMLStream::FOOTNOTES, nNoteId);
 
     Id nId;
     switch (aType)
@@ -286,15 +287,15 @@ void OOXMLDocumentImpl::resolveFootnote(Stream & rStream,
         break;
     }
 
-    resolveFastSubStreamWithId(rStream, mpXNoteStream, nId);
+    resolveFastSubStreamWithId(rStream, mpXFootnoteStream, nId);
 }
 
 void OOXMLDocumentImpl::resolveEndnote(Stream & rStream,
                                        Id aType,
                                        const sal_Int32 nNoteId)
 {
-    if (!mpXNoteStream)
-        mpXNoteStream = getXNoteStream(OOXMLStream::ENDNOTES, nNoteId);
+    if (!mpXEndnoteStream)
+       mpXEndnoteStream = getXNoteStream(OOXMLStream::ENDNOTES, nNoteId);
 
     Id nId;
     switch (aType)
@@ -308,7 +309,7 @@ void OOXMLDocumentImpl::resolveEndnote(Stream & rStream,
         break;
     }
 
-    resolveFastSubStreamWithId(rStream, mpXNoteStream, nId);
+    resolveFastSubStreamWithId(rStream, mpXEndnoteStream, nId);
 }
 
 void OOXMLDocumentImpl::resolveCommentsExtendedStream(Stream& rStream)
diff --git a/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx b/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx
index 5572d0c77d7b..fc26f8aeec5a 100644
--- a/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx
+++ b/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx
@@ -37,7 +37,8 @@ class OOXMLDocumentImpl : public OOXMLDocument
 {
     OOXMLStream::Pointer_t mpStream;
     css::uno::Reference<css::task::XStatusIndicator> mxStatusIndicator;
-    writerfilter::Reference<Stream>::Pointer_t mpXNoteStream;
+    writerfilter::Reference<Stream>::Pointer_t mpXFootnoteStream;
+    writerfilter::Reference<Stream>::Pointer_t mpXEndnoteStream;
     sal_Int32 mnXNoteId;
 
     css::uno::Reference<css::frame::XModel> mxModel;


More information about the Libreoffice-commits mailing list