include/oox/core/xmlfilterbase.hxx        |    6 +++++-
 oox/source/core/xmlfilterbase.cxx         |    2 --
 sc/qa/unit/subsequent_export-test.cxx     |    4 ++++
 sc/source/filter/excel/excdoc.cxx         |    3 ++-
 sd/qa/unit/export-tests-ooxml1.cxx        |    4 ++--
 sd/source/filter/eppt/pptx-epptooxml.cxx  |    4 ++--
 sw/qa/extras/ooxmlexport/ooxmlexport3.cxx |   11 +++++++++++
 7 files changed, 26 insertions(+), 8 deletions(-)

New commits:
commit bf5c486946f2b0a708a251c8ff614293ae37c6ba
Author: Jan Holesovsky <ke...@collabora.com>
Date:   Thu Mar 8 12:24:48 2018 +0100

    tdf#116283 oox customXml: Don't write the Relationship to DOCX files twice.
    
    Change-Id: Id3da40138e86c142707e377aa897df372aacb704
    Reviewed-on: https://gerrit.libreoffice.org/50947
    Reviewed-by: Jan Holesovsky <ke...@collabora.com>
    Tested-by: Jan Holesovsky <ke...@collabora.com>

diff --git a/include/oox/core/xmlfilterbase.hxx 
b/include/oox/core/xmlfilterbase.hxx
index 75fc03920b79..69586fe020bb 100644
--- a/include/oox/core/xmlfilterbase.hxx
+++ b/include/oox/core/xmlfilterbase.hxx
@@ -226,7 +226,12 @@ public:
      */
     void exportDocumentProperties( const css::uno::Reference< 
css::document::XDocumentProperties >& xProperties );
 
+    /** Write the customXml entries we are preserving (xlsx and pptx only). */
+    void exportCustomFragments();
+
+    /** Read the document properties and also the customXml entries (xlsx and 
pptx only). */
     void importDocumentProperties();
+
     static void putPropertiesToDocumentGrabBag(const 
css::uno::Reference<css::lang::XComponent>& xDstDoc,
                                                const 
comphelper::SequenceAsHashMap& rProperties);
 
@@ -259,7 +264,6 @@ private:
                             const css::uno::Reference< css::io::XStream >& 
rxOutStream ) const override;
 
     void importCustomFragments(css::uno::Reference<css::embed::XStorage>& 
xDocumentStorage);
-    void exportCustomFragments();
 
 private:
     ::std::unique_ptr< XmlFilterBaseImpl > mxImpl;
diff --git a/oox/source/core/xmlfilterbase.cxx 
b/oox/source/core/xmlfilterbase.cxx
index 0388fae5f473..00d202b315da 100644
--- a/oox/source/core/xmlfilterbase.cxx
+++ b/oox/source/core/xmlfilterbase.cxx
@@ -841,8 +841,6 @@ void XmlFilterBase::exportDocumentProperties( const 
Reference< XDocumentProperti
         writeAppProperties( *this, xProperties );
         writeCustomProperties( *this, xProperties );
     }
-
-    exportCustomFragments();
 }
 
 // protected ------------------------------------------------------------------
diff --git a/sc/qa/unit/subsequent_export-test.cxx 
b/sc/qa/unit/subsequent_export-test.cxx
index 595e563dc301..ff4063f8ed84 100644
--- a/sc/qa/unit/subsequent_export-test.cxx
+++ b/sc/qa/unit/subsequent_export-test.cxx
@@ -3055,6 +3055,10 @@ void ScExportTest::testCustomXml()
     xmlDocPtr pRelsDoc = XPathHelper::parseExport(pXPathFile, m_xSFactory, 
"customXml/_rels/item1.xml.rels");
     CPPUNIT_ASSERT(pRelsDoc);
 
+    // Check there is a relation to itemProps1.xml.
+    assertXPath(pRelsDoc, "/r:Relationships/r:Relationship", 1);
+    assertXPath(pRelsDoc, "/r:Relationships/r:Relationship[@Id='rId1']", 
"Target", "itemProps1.xml");
+
     std::shared_ptr<SvStream> pStream = 
XPathHelper::parseExportStream(pXPathFile, m_xSFactory, "ddp/ddpfile.xen");
     CPPUNIT_ASSERT(pStream);
 }
diff --git a/sc/source/filter/excel/excdoc.cxx 
b/sc/source/filter/excel/excdoc.cxx
index d2dd5d147b0e..bc0d4e3de177 100644
--- a/sc/source/filter/excel/excdoc.cxx
+++ b/sc/source/filter/excel/excdoc.cxx
@@ -830,7 +830,8 @@ void ExcDocument::WriteXml( XclExpXmlStream& rStrm )
     uno::Reference<document::XDocumentPropertiesSupplier> xDPS( 
pDocShell->GetModel(), uno::UNO_QUERY_THROW );
     uno::Reference<document::XDocumentProperties> xDocProps = 
xDPS->getDocumentProperties();
 
-    rStrm.exportDocumentProperties( xDocProps );
+    rStrm.exportDocumentProperties(xDocProps);
+    rStrm.exportCustomFragments();
 
     sax_fastparser::FSHelperPtr& rWorkbook = rStrm.GetCurrentStream();
     rWorkbook->startElement( XML_workbook,
diff --git a/sd/qa/unit/export-tests-ooxml1.cxx 
b/sd/qa/unit/export-tests-ooxml1.cxx
index 2ccc48982727..54e411a482f7 100644
--- a/sd/qa/unit/export-tests-ooxml1.cxx
+++ b/sd/qa/unit/export-tests-ooxml1.cxx
@@ -847,8 +847,8 @@ void SdOOXMLExportTest1::testCustomXml()
     CPPUNIT_ASSERT(pRelsDoc);
 
     // Check there is a relation to itemProps1.xml.
-    const OUString sXmlPath = 
"/rels:Relationships/rels:Relationship[@Id='rId1']";
-    assertXPath(pRelsDoc, OUStringToOString(sXmlPath, RTL_TEXTENCODING_UTF8), 
"Target", "itemProps1.xml");
+    assertXPath(pRelsDoc, "/rels:Relationships/rels:Relationship", 1);
+    assertXPath(pRelsDoc, "/rels:Relationships/rels:Relationship[@Id='rId1']", 
"Target", "itemProps1.xml");
 
     std::shared_ptr<SvStream> pStream = parseExportStream(tempFile, 
"ddp/ddpfile.xen");
     CPPUNIT_ASSERT(pStream);
diff --git a/sd/source/filter/eppt/pptx-epptooxml.cxx 
b/sd/source/filter/eppt/pptx-epptooxml.cxx
index ca5f9ef56c67..2672f17c185f 100644
--- a/sd/source/filter/eppt/pptx-epptooxml.cxx
+++ b/sd/source/filter/eppt/pptx-epptooxml.cxx
@@ -358,9 +358,9 @@ void PowerPointExport::writeDocumentProperties()
     uno::Reference<document::XDocumentProperties> xDocProps = 
xDPS->getDocumentProperties();
 
     if (xDocProps.is())
-    {
         exportDocumentProperties(xDocProps);
-    }
+
+    exportCustomFragments();
 }
 
 bool PowerPointExport::importDocument() throw()
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx 
b/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx
index bfab921a26ae..02b26aba67c3 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx
@@ -536,6 +536,17 @@ DECLARE_OOXMLEXPORT_TEST(testCustomXmlGrabBag, 
"customxml.docx")
     CPPUNIT_ASSERT(CustomXml); // Grab Bag has all the expected elements
 }
 
+DECLARE_OOXMLEXPORT_TEST(testCustomXmlRelationships, "customxml.docx")
+{
+    xmlDocPtr pXmlDoc = parseExport("customXml/_rels/item1.xml.rels");
+    if(!pXmlDoc)
+        return;
+
+    // Check there is a relation to itemProps1.xml.
+    assertXPath(pXmlDoc, "/rels:Relationships/rels:Relationship", 1);
+    assertXPath(pXmlDoc, "/rels:Relationships/rels:Relationship[@Id='rId1']", 
"Target", "itemProps1.xml");
+}
+
 DECLARE_OOXMLEXPORT_TEST(testFdo69644, "fdo69644.docx")
 {
     // The problem was that the exporter exported the table definition
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to