[Libreoffice-commits] core.git: Branch 'libreoffice-4-4' - oox/source sd/qa

Miklos Vajna vmiklos at collabora.co.uk
Fri Sep 11 02:37:28 PDT 2015


 oox/source/docprop/ooxmldocpropimport.cxx |    7 ++++++-
 sd/qa/unit/data/pptx/tdf93097.pptx        |binary
 sd/qa/unit/import-tests.cxx               |   12 ++++++++++++
 3 files changed, 18 insertions(+), 1 deletion(-)

New commits:
commit d5220fcd4d2583ce7fdfaad4cc5ea2ca881f8c37
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Fri Sep 4 11:49:25 2015 +0200

    tdf#93097 oox: fix import of metadata from non-relative stream paths
    
    Commit ef2668bad976f1fbb70759887cafd35ea7833655 (PPTX import: fix
    missing document metadata, 2014-08-28) implemented metadata import for
    the PPTX filter, but in case the metadata stream is not an existing one,
    then OHierarchyHolder_Impl::GetListPathFromString() invoked by
    OStorage::openStreamElementByHierarchicalName() throws.
    
    The bugdoc is generated by a 3rd-party tool that always starts the
    stream path with a slash, and MSO seems to just ignore that: so let's do
    the same to be able to open the document.
    
    (cherry picked from commit 46cf9bb76b29f2bfa6639d9aaf4f26dee365bc0c)
    
    Conflicts:
    	sd/qa/unit/import-tests.cxx
    
    Change-Id: I6c0715adeb19b9055669f6a45055415dd2c44e28
    Reviewed-on: https://gerrit.libreoffice.org/18372
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/oox/source/docprop/ooxmldocpropimport.cxx b/oox/source/docprop/ooxmldocpropimport.cxx
index c711f2f..646c09c 100644
--- a/oox/source/docprop/ooxmldocpropimport.cxx
+++ b/oox/source/docprop/ooxmldocpropimport.cxx
@@ -80,8 +80,13 @@ Sequence< InputSource > lclGetRelatedStreams( const Reference< XStorage >& rxSto
             const StringPair& rEntry = rEntries[ nEntryIndex ];
             if ( rEntry.First == "Target" )
             {
+                // The stream path is always a relative one, ignore the leading "/" if it's there.
+                OUString aStreamPath = rEntry.Second;
+                if (aStreamPath.startsWith("/"))
+                    aStreamPath = aStreamPath.copy(1);
+
                 Reference< XExtendedStorageStream > xExtStream(
-                    xHierarchy->openStreamElementByHierarchicalName( rEntry.Second, ElementModes::READ ), UNO_QUERY_THROW );
+                    xHierarchy->openStreamElementByHierarchicalName( aStreamPath, ElementModes::READ ), UNO_QUERY_THROW );
                 Reference< XInputStream > xInStream = xExtStream->getInputStream();
                 if( xInStream.is() )
                 {
diff --git a/sd/qa/unit/data/pptx/tdf93097.pptx b/sd/qa/unit/data/pptx/tdf93097.pptx
new file mode 100644
index 0000000..687110d
Binary files /dev/null and b/sd/qa/unit/data/pptx/tdf93097.pptx differ
diff --git a/sd/qa/unit/import-tests.cxx b/sd/qa/unit/import-tests.cxx
index 024801b..c928341 100644
--- a/sd/qa/unit/import-tests.cxx
+++ b/sd/qa/unit/import-tests.cxx
@@ -97,6 +97,7 @@ public:
     void testPDFImport();
     void testPDFImportSkipImages();
     void testBnc910045();
+    void testTdf93097();
 
     CPPUNIT_TEST_SUITE(SdImportTest);
 
@@ -132,6 +133,7 @@ public:
     CPPUNIT_TEST(testPDFImport);
     CPPUNIT_TEST(testPDFImportSkipImages);
     CPPUNIT_TEST(testBnc910045);
+    CPPUNIT_TEST(testTdf93097);
 
     CPPUNIT_TEST_SUITE_END();
 };
@@ -1137,6 +1139,16 @@ void SdImportTest::testBnc910045()
     CPPUNIT_ASSERT_EQUAL(sal_Int32(5210557), nColor);
 }
 
+void SdImportTest::testTdf93097()
+{
+    // Throwing metadata import aborted the filter, check that metadata is now imported.
+    sd::DrawDocShellRef xDocShRef = loadURL(getURLFromSrc("/sd/qa/unit/data/pptx/tdf93097.pptx"), PPTX);
+    uno::Reference<document::XDocumentPropertiesSupplier> xDocumentPropertiesSupplier(xDocShRef->GetModel(), uno::UNO_QUERY);
+    uno::Reference<document::XDocumentProperties> xDocumentProperties = xDocumentPropertiesSupplier->getDocumentProperties();
+    CPPUNIT_ASSERT_EQUAL(OUString("ss"), xDocumentProperties->getTitle());
+    xDocShRef->DoClose();
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(SdImportTest);
 
 CPPUNIT_PLUGIN_IMPLEMENT();


More information about the Libreoffice-commits mailing list