[Libreoffice-commits] core.git: 4 commits - config_host/config_features.h.in configure.ac sc/qa writerfilter/source

Markus Mohrhard markus.mohrhard at collabora.co.uk
Mon Mar 3 02:01:56 PST 2014


 config_host/config_features.h.in                   |    5 +
 configure.ac                                       |   20 +++++
 sc/qa/unit/data/xlsx/universal-content-strict.xlsx |binary
 sc/qa/unit/filters-test.cxx                        |   84 ++-------------------
 sc/qa/unit/helper/qahelper.cxx                     |   67 ++++++++++++++++
 writerfilter/source/ooxml/OOXMLDocumentImpl.cxx    |   36 ++++++---
 writerfilter/source/ooxml/OOXMLStreamImpl.cxx      |   39 +++++++++
 7 files changed, 165 insertions(+), 86 deletions(-)

New commits:
commit 13a30b3a109c39ce346ea5bc1f35889209bb375b
Author: Markus Mohrhard <markus.mohrhard at collabora.co.uk>
Date:   Mon Mar 3 10:52:05 2014 +0100

    remove remaining parts of the old crash testing
    
    Change-Id: I2282d2ee8304bdc9dbdf24c5a22c16d0e742deb7

diff --git a/sc/qa/unit/filters-test.cxx b/sc/qa/unit/filters-test.cxx
index 74a68ae..4de62d1 100644
--- a/sc/qa/unit/filters-test.cxx
+++ b/sc/qa/unit/filters-test.cxx
@@ -20,8 +20,6 @@
 #include <sfx2/sfxmodelfactory.hxx>
 #include <svl/stritem.hxx>
 
-#define TEST_BUG_FILES 0
-
 #include "helper/qahelper.hxx"
 
 #include "docsh.hxx"
@@ -70,14 +68,6 @@ public:
     void testContentXLS_XML();
     void testSharedFormulaXLS();
     void testSharedFormulaXLSX();
-#if TEST_BUG_FILES
-    //goes recursively through all files in this dir and tries to open them
-    void testDir(osl::Directory& rDir, sal_Int32 nType);
-    //test Bug Files and search for files that crash LibO
-    void testBugFiles();
-    void testBugFilesXLS();
-    void testBugFilesXLSX();
-#endif
     void testLegacyCellAnchoredRotatedShape();
 
     CPPUNIT_TEST_SUITE(ScFiltersTest);
@@ -93,11 +83,6 @@ public:
     CPPUNIT_TEST(testSharedFormulaXLSX);
     CPPUNIT_TEST(testLegacyCellAnchoredRotatedShape);
 
-#if TEST_BUG_FILES
-    CPPUNIT_TEST(testBugFiles);
-    CPPUNIT_TEST(testBugFilesXLS);
-    CPPUNIT_TEST(testBugFilesXLSX);
-#endif
     CPPUNIT_TEST_SUITE_END();
 
 private:
@@ -134,64 +119,6 @@ void ScFiltersTest::testCVEs()
 #endif
 }
 
-#if TEST_BUG_FILES
-
-void ScFiltersTest::testDir(osl::Directory& rDir, sal_uInt32 nType)
-{
-    OUString aFilterName(getFileFormats()[nType].pFilterName, strlen(getFileFormats()[nType].pFilterName), RTL_TEXTENCODING_UTF8) ;
-    OUString aFilterType(getFileFormats()[nType].pTypeName, strlen(getFileFormats()[nType].pTypeName), RTL_TEXTENCODING_UTF8);
-
-    osl::DirectoryItem aItem;
-    osl::FileStatus aFileStatus(osl_FileStatus_Mask_FileURL|osl_FileStatus_Mask_Type);
-    while (rDir.getNextItem(aItem) == osl::FileBase::E_None)
-    {
-        aItem.getFileStatus(aFileStatus);
-        OUString sURL = aFileStatus.getFileURL();
-        std::cout << "File: " << OUStringToOString(sURL, RTL_TEXTENCODING_UTF8).getStr() << std::endl;
-        //OStringBuffer aMessage("Failed loading: ");
-        //aMessage.append(OUStringToOString(sURL, RTL_TEXTENCODING_UTF8));
-
-        unsigned int nFormatType = getFileFormats()[nType].nFormatType;
-        unsigned int nClipboardId = nFormatType ? SFX_FILTER_IMPORT | SFX_FILTER_USESOPTIONS : 0;
-        ScDocShellRef xDocSh = load(sURL, aFilterName, OUString(),
-            aFilterType, nFormatType, nClipboardId );
-        // use this only if you're sure that all files can be loaded
-        // pay attention to lock files
-        //CPPUNIT_ASSERT_MESSAGE(aMessage.getStr(), xDocSh.Is());
-        if (xDocSh.Is())
-            xDocSh->DoClose();
-    }
-}
-
-void ScFiltersTest::testBugFiles()
-{
-    OUString aDirName = getURLFromSrc("/sc/qa/unit/data/bugODS/");
-    osl::Directory aDir(aDirName);
-
-    CPPUNIT_ASSERT(osl::FileBase::E_None == aDir.open());
-    testDir(aDir, 0);
-}
-
-void ScFiltersTest::testBugFilesXLS()
-{
-    OUString aDirName = getURLFromSrc("/sc/qa/unit/data/bugXLS/");
-    osl::Directory aDir(aDirName);
-
-    CPPUNIT_ASSERT(osl::FileBase::E_None == aDir.open());
-    testDir(aDir, 1);
-}
-
-void ScFiltersTest::testBugFilesXLSX()
-{
-    OUString aDirName = getURLFromSrc("/sc/qa/unit/data/bugXLSX/");
-    osl::Directory aDir(aDirName);
-
-    CPPUNIT_ASSERT(osl::FileBase::E_None == aDir.open());
-    testDir(aDir, 2);
-}
-
-#endif
-
 namespace {
 
 void testRangeNameImpl(ScDocument* pDoc)
commit 69e14b0fee1c474168d8159b874d7c2fd9dea64f
Author: Markus Mohrhard <markus.mohrhard at collabora.co.uk>
Date:   Mon Mar 3 10:49:37 2014 +0100

    add experimental export file validation
    
    In calc unit tests we validate the exported OOXML files now with
    officeotron.
    
    For this there must be a script called officeotron that takes the file
    path.
    
    Currently the generated files are still invalid but I'm going to fix it.
    
    Change-Id: I1809b9457a535dbbe6a72f3778dfb53db168bbda

diff --git a/config_host/config_features.h.in b/config_host/config_features.h.in
index 0f63f26..6a46e1c 100644
--- a/config_host/config_features.h.in
+++ b/config_host/config_features.h.in
@@ -120,4 +120,9 @@
  */
 #define HAVE_FT_FACE_GETCHARVARIANTINDEX 0
 
+/*
+ * Whether to use validation on files.
+ */
+#define HAVE_EXPORT_VALIDATION 0
+
 #endif
diff --git a/configure.ac b/configure.ac
index 4d98071..bf2d03c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1835,6 +1835,15 @@ AC_ARG_WITH(ant-home,
     ],
 ,)
 
+AC_ARG_WITH(export-validation,
+    AS_HELP_STRING([--with-export-validation],
+        [If you want the exported files to be validated. Right now limited to OOXML files in calc export tests.
+         Note: You need an executable script officeotron that takes the path to the file.])
+    [
+                            Usage: --with-export-validation
+    ],
+,)
+
 AC_ARG_WITH(junit,
     AS_HELP_STRING([--with-junit],
         [Specifies the JUnit 4 jar file to use for JUnit-based tests.
@@ -2558,6 +2567,17 @@ dnl ENABLE_JAVA="TRUE" if we want there to be *run-time* (and build-time) suppor
 dnl ENABLE_JAVA="" indicate no Java support at all
 
 dnl ===================================================================
+dnl Export file validation
+dnl ===================================================================
+AC_MSG_CHECKING([whether to enable export file validation])
+if test "with_export_validation" != "no"; then
+    AC_MSG_RESULT([yes])
+    AC_DEFINE(HAVE_EXPORT_VALIDATION)
+else
+    AC_MSG_RESULT([no])
+fi
+
+dnl ===================================================================
 dnl  Test the Solaris compiler version
 dnl ===================================================================
 if test "$_os" = "SunOS"; then
diff --git a/sc/qa/unit/helper/qahelper.cxx b/sc/qa/unit/helper/qahelper.cxx
index b875265..35f5bc9 100644
--- a/sc/qa/unit/helper/qahelper.cxx
+++ b/sc/qa/unit/helper/qahelper.cxx
@@ -587,6 +587,66 @@ void ScBootstrapFixture::createCSVPath(const OUString& aFileBase, OUString& rCSV
     rCSVPath = aBuffer.makeStringAndClear();
 }
 
+namespace validation {
+
+enum ScValidationFormat
+{
+    OOXML
+};
+
+}
+
+#if HAVE_EXPORT_VALIDATION
+
+namespace {
+
+void validate(const utl::TempFile& rTempFile, validation::ScValidationFormat eFormat)
+{
+    OUString aValidator;
+    if( eFormat == validation::OOXML )
+    {
+        aValidator = "officeotron ";
+    }
+    else
+        return;
+
+    utl::TempFile aOutput;
+    aOutput.EnableKillingFile();
+    OUString aOutputFile = aOutput.GetFileName();
+    OUString aInputFile = rTempFile.GetFileName();
+    OUString aCommand = aValidator + aInputFile + " > " + aOutputFile;
+
+    system(OUStringToOString(aCommand, RTL_TEXTENCODING_UTF8).getStr());
+
+    std::string aContent;
+    loadFile(aOutputFile, aContent);
+    OString aContentString(aContent.c_str());
+    OUString aContentOUString = OStringToOUString(aContentString, RTL_TEXTENCODING_UTF8);
+
+    if( eFormat == validation::OOXML && !aContentOUString.isEmpty() )
+    {
+        // check for validation errors here
+        sal_Int32 nIndex = aContentOUString.lastIndexOf("Grand total of errors in submitted package: ");
+        if(nIndex == -1)
+        {
+            SAL_WARN("sc", "no summery line");
+        }
+        else
+        {
+            sal_Int32 nStartOfNumber = nIndex + std::strlen("Grand total of errors in submitted package: ");
+            OUString aNumber = aContentOUString.copy(nStartOfNumber);
+            sal_Int32 nErrors = aNumber.toInt32();
+            OString aMsg("validation error in OOXML export: Errors: ");
+            aMsg = aMsg + OString::number(nErrors);
+            CPPUNIT_ASSERT_MESSAGE(aMsg.getStr(), nErrors == 0);
+        }
+    }
+}
+
+}
+
+#endif
+
 ScDocShellRef ScBootstrapFixture::saveAndReload(
     ScDocShell* pShell, const OUString &rFilter,
     const OUString &rUserData, const OUString& rTypeName, sal_uLong nFormatType)
@@ -613,7 +673,12 @@ ScDocShellRef ScBootstrapFixture::saveAndReload(
     if (nFormatType == ODS_FORMAT_TYPE)
         nFormat = SFX_FILTER_IMPORT | SFX_FILTER_USESOPTIONS;
 
-    return load(aTempFile.GetURL(), rFilter, rUserData, rTypeName, nFormatType, nFormat );
+    ScDocShellRef xDocSh = load(aTempFile.GetURL(), rFilter, rUserData, rTypeName, nFormatType, nFormat );
+#if HAVE_EXPORT_VALIDATION
+    if(nFormatType == XLSX_FORMAT_TYPE)
+        validate(aTempFile, validation::OOXML);
+#endif
+    return xDocSh;
 }
 
 ScDocShellRef ScBootstrapFixture::saveAndReload( ScDocShell* pShell, sal_Int32 nFormat )
commit 1c3c83e6a35ee4258c9d658494297d1453a70806
Author: Markus Mohrhard <markus.mohrhard at collabora.co.uk>
Date:   Mon Mar 3 07:50:05 2014 +0100

    add import test for strict OOXML import in calc
    
    Change-Id: I4dc0fb84cc9e2601e7ae8b82a467787388ac4d99

diff --git a/sc/qa/unit/data/xlsx/universal-content-strict.xlsx b/sc/qa/unit/data/xlsx/universal-content-strict.xlsx
new file mode 100644
index 0000000..32beb4d
Binary files /dev/null and b/sc/qa/unit/data/xlsx/universal-content-strict.xlsx differ
diff --git a/sc/qa/unit/filters-test.cxx b/sc/qa/unit/filters-test.cxx
index 53f8c76..74a68ae 100644
--- a/sc/qa/unit/filters-test.cxx
+++ b/sc/qa/unit/filters-test.cxx
@@ -64,6 +64,7 @@ public:
     void testContentODS();
     void testContentXLS();
     void testContentXLSX();
+    void testContentXLSXStrict(); // strict OOXML
     void testContentLotus123();
     void testContentDIF();
     void testContentXLS_XML();
@@ -315,6 +316,16 @@ void ScFiltersTest::testContentXLSX()
     xDocSh->DoClose();
 }
 
+void ScFiltersTest::testContentXLSXStrict()
+{
+    ScDocShellRef xDocSh = loadDoc("universal-content-strict.", XLSX);
+    xDocSh->DoHardRecalc(true);
+
+    ScDocument* pDoc = xDocSh->GetDocument();
+    testContentImpl(pDoc, XLSX);
+    xDocSh->DoClose();
+}
+
 void ScFiltersTest::testContentLotus123()
 {
     ScDocShellRef xDocSh = loadDoc("universal-content.", LOTUS123);
commit 46e25170b901211f9e9bed117e25428505d8536c
Author: Markus Mohrhard <markus.mohrhard at collabora.co.uk>
Date:   Sun Mar 2 19:13:18 2014 +0100

    allow OOXML strict relationships in writer
    
    Change-Id: I1c09280f68467748faedee19c4a66be3bc7d7aa3

diff --git a/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx b/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx
index 5f67fd2..09dbbb1 100644
--- a/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx
+++ b/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx
@@ -494,7 +494,8 @@ void OOXMLDocumentImpl::resolveCustomXmlStream(Stream & rStream)
     mxRelationshipAccess.set((*dynamic_cast<OOXMLStreamImpl *>(mpStream.get())).accessDocumentStream(), uno::UNO_QUERY_THROW);
     if (mxRelationshipAccess.is())
     {
-        OUString sCustomType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml");
+        static const OUString sCustomType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml");
+        static const OUString sCustomTypeStrict("http://purl.oclc.org/ooxml/officeDocument/relationships/customXml");
         OUString sTarget("Target");
         bool bFound = false;
         sal_Int32 counter = 0;
@@ -510,7 +511,8 @@ void OOXMLDocumentImpl::resolveCustomXmlStream(Stream & rStream)
                 beans::StringPair aPair = aSeq[i];
                 // Need to resolve only customxml files from document relationships.
                 // Skipping other files.
-                if (aPair.Second.compareTo(sCustomType) == 0)
+                if (aPair.Second.compareTo(sCustomType) == 0 ||
+                        aPair.Second.compareTo(sCustomTypeStrict) == 0)
                     bFound = true;
                 else if(aPair.First.compareTo(sTarget) == 0 && bFound)
                 {
@@ -548,6 +550,10 @@ void OOXMLDocumentImpl::resolveGlossaryStream(Stream & /*rStream*/)
     static OUString sStylesType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles");
     static OUString sFonttableType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable");
     static OUString sWebSettings("http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings");
+    static OUString sSettingsTypeStrict("http://purl.oclc.org/ooxml/officeDocument/relationships/settings");
+    static OUString sStylesTypeStrict("http://purl.oclc.org/ooxml/officeDocument/relationships/styles");
+    static OUString sFonttableTypeStrict("http://purl.oclc.org/ooxml/officeDocument/relationships/fontTable");
+    static OUString sWebSettingsStrict("http://purl.oclc.org/ooxml/officeDocument/relationships/webSettings");
 
     OOXMLStream::Pointer_t pStream;
     try
@@ -581,25 +587,29 @@ void OOXMLDocumentImpl::resolveGlossaryStream(Stream & /*rStream*/)
 
               OOXMLStream::StreamType_t nType(OOXMLStream::UNKNOWN);
               bool bFound = true;
-              if(gType.compareTo(sSettingsType) == 0)
+              if(gType.compareTo(sSettingsType) == 0 ||
+                      gType.compareTo(sSettingsTypeStrict) == 0)
               {
                   nType = OOXMLStream::SETTINGS;
                   contentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml";
               }
-              else if(gType.compareTo(sStylesType) == 0)
+              else if(gType.compareTo(sStylesType) == 0 ||
+                      gType.compareTo(sStylesTypeStrict) == 0)
               {
                   nType = OOXMLStream::STYLES;
                   contentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml";
               }
-              else if(gType.compareTo(sWebSettings) == 0)
+              else if(gType.compareTo(sWebSettings) == 0 ||
+                      gType.compareTo(sWebSettingsStrict) == 0)
               {
                   nType = OOXMLStream::WEBSETTINGS;
                   contentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml";
               }
-              else if(gType.compareTo(sFonttableType) == 0)
+              else if(gType.compareTo(sFonttableType) == 0 ||
+                      gType.compareTo(sFonttableTypeStrict) == 0)
               {
-              nType = OOXMLStream::FONTTABLE;
-              contentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml";
+                  nType = OOXMLStream::FONTTABLE;
+                  contentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml";
               }
               else
               {
@@ -650,6 +660,7 @@ void OOXMLDocumentImpl::resolveEmbeddingsStream(Stream & /*rStream*/)
     if (mxRelationshipAccess.is())
     {
         OUString sChartType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart");
+        OUString sChartTypeStrict("http://purl.oclc.org/ooxml/officeDocument/relationships/chart");
         OUString sTarget("Target");
         bool bFound = false;
         sal_Int32 counter = 0;
@@ -662,7 +673,8 @@ void OOXMLDocumentImpl::resolveEmbeddingsStream(Stream & /*rStream*/)
             for (sal_Int32 i = 0; i < aSeq.getLength(); i++)
             {
                 beans::StringPair aPair = aSeq[i];
-                if (aPair.Second.compareTo(sChartType) == 0)
+                if (aPair.Second.compareTo(sChartType) == 0 ||
+                        aPair.Second.compareTo(sChartTypeStrict) == 0)
                     bFound = true;
                 else if(aPair.First.compareTo(sTarget) == 0 && bFound)
                 {
@@ -701,7 +713,8 @@ void OOXMLDocumentImpl::resolveActiveXStream(Stream & rStream)
     mxRelationshipAccess.set((*dynamic_cast<OOXMLStreamImpl *>(mpStream.get())).accessDocumentStream(), uno::UNO_QUERY_THROW);
     if (mxRelationshipAccess.is())
     {
-        OUString sCustomType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/control");
+        static const OUString sCustomType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/control");
+        static const OUString sCustomTypeStrict("http://purl.oclc.org/ooxml/officeDocument/relationships/control");
         OUString sTarget("Target");
         bool bFound = false;
         sal_Int32 counter = 0;
@@ -717,7 +730,8 @@ void OOXMLDocumentImpl::resolveActiveXStream(Stream & rStream)
                 beans::StringPair aPair = aSeq[i];
                 // Need to resolve only ActiveX files from document relationships.
                 // Skipping other files.
-                if (aPair.Second.compareTo(sCustomType) == 0)
+                if (aPair.Second.compareTo(sCustomType) == 0 ||
+                        aPair.Second.compareTo(sCustomTypeStrict) == 0)
                     bFound = true;
                 else if(aPair.First.compareTo(sTarget) == 0 && bFound)
                 {
diff --git a/writerfilter/source/ooxml/OOXMLStreamImpl.cxx b/writerfilter/source/ooxml/OOXMLStreamImpl.cxx
index d278805..1495b17 100644
--- a/writerfilter/source/ooxml/OOXMLStreamImpl.cxx
+++ b/writerfilter/source/ooxml/OOXMLStreamImpl.cxx
@@ -119,68 +119,104 @@ bool OOXMLStreamImpl::lcl_getTarget(uno::Reference<embed::XRelationshipAccess>
     static OUString sSettingsType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings");
     static OUString sChartType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart");
     static OUString sEmbeddingsType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/package");
+    // OOXML strict
+    static OUString sDocumentTypeStrict("http://purl.oclc.org/ooxml/officeDocument/relationships/officeDocument");
+    static OUString sStylesTypeStrict("http://purl.oclc.org/ooxml/officeDocument/relationships/styles");
+    static OUString sNumberingTypeStrict("http://purl.oclc.org/ooxml/officeDocument/relationships/numbering");
+    static OUString sFonttableTypeStrict("http://purl.oclc.org/ooxml/officeDocument/relationships/fontTable");
+    static OUString sFootnotesTypeStrict("http://purl.oclc.org/ooxml/officeDocument/relationships/footnotes");
+    static OUString sEndnotesTypeStrict("http://purl.oclc.org/ooxml/officeDocument/relationships/endnotes");
+    static OUString sCommentsTypeStrict("http://purl.oclc.org/ooxml/officeDocument/relationships/comments");
+    static OUString sThemeTypeStrict("http://purl.oclc.org/ooxml/officeDocument/relationships/theme");
+    static OUString sCustomTypeStrict("http://purl.oclc.org/ooxml/officeDocument/relationships/customXml");
+    static OUString sCustomPropsTypeStrict("http://purl.oclc.org/ooxml/officeDocument/relationships/customXmlProps");
+    static OUString sActiveXTypeStrict("http://purl.oclc.org/ooxml/officeDocument/relationships/control");
+    static OUString sGlossaryTypeStrict("http://purl.oclc.org/ooxml/officeDocument/relationships/glossaryDocument");
+    static OUString sWebSettingsStrict("http://purl.oclc.org/ooxml/officeDocument/relationships/webSettings");
+    static OUString sSettingsTypeStrict("http://purl.oclc.org/ooxml/officeDocument/relationships/settings");
+    static OUString sChartTypeStrict("http://purl.oclc.org/ooxml/officeDocument/relationships/chart");
+    static OUString sEmbeddingsTypeStrict("http://purl.oclc.org/ooxml/officeDocument/relationships/package");
     static OUString sTarget("Target");
     static OUString sTargetMode("TargetMode");
     static OUString sExternal("External");
     static OUString sVBAProjectType("http://schemas.microsoft.com/office/2006/relationships/vbaProject");
 
     OUString sStreamType;
+    OUString sStreamTypeStrict;
 
     switch (nStreamType)
     {
         case VBAPROJECT:
             sStreamType = sVBAProjectType;
+            sStreamTypeStrict = sVBAProjectType;
             break;
         case DOCUMENT:
             sStreamType = sDocumentType;
+            sStreamTypeStrict = sDocumentTypeStrict;
             break;
         case STYLES:
             sStreamType = sStylesType;
+            sStreamTypeStrict = sStylesTypeStrict;
             break;
         case NUMBERING:
             sStreamType = sNumberingType;
+            sStreamTypeStrict = sNumberingTypeStrict;
             break;
         case FONTTABLE:
             sStreamType = sFonttableType;
+            sStreamTypeStrict = sFonttableTypeStrict;
             break;
         case FOOTNOTES:
             sStreamType = sFootnotesType;
+            sStreamTypeStrict = sFootnotesTypeStrict;
             break;
         case ENDNOTES:
             sStreamType = sEndnotesType;
+            sStreamTypeStrict = sEndnotesTypeStrict;
             break;
         case COMMENTS:
             sStreamType = sCommentsType;
+            sStreamTypeStrict = sCommentsTypeStrict;
             break;
         case THEME:
             sStreamType = sThemeType;
+            sStreamTypeStrict = sThemeTypeStrict;
             break;
         case CUSTOMXML:
             sStreamType = sCustomType;
+            sStreamTypeStrict = sCustomTypeStrict;
             break;
         case CUSTOMXMLPROPS:
             sStreamType = sCustomPropsType;
+            sStreamTypeStrict = sCustomPropsTypeStrict;
             break;
         case ACTIVEX:
             sStreamType = sActiveXType;
+            sStreamTypeStrict = sActiveXTypeStrict;
             break;
         case ACTIVEXBIN:
             sStreamType = sActiveXBinType;
+            sStreamTypeStrict = sActiveXBinType;
             break;
         case SETTINGS:
             sStreamType = sSettingsType;
+            sStreamTypeStrict = sSettingsTypeStrict;
             break;
         case GLOSSARY:
             sStreamType = sGlossaryType;
+            sStreamTypeStrict = sGlossaryTypeStrict;
             break;
         case WEBSETTINGS:
             sStreamType = sWebSettings;
+            sStreamTypeStrict = sWebSettingsStrict;
           break;
         case CHARTS:
             sStreamType = sChartType;
+            sStreamTypeStrict = sChartTypeStrict;
           break;
         case EMBEDDINGS:
             sStreamType = sEmbeddingsType;
+            sStreamTypeStrict = sEmbeddingsTypeStrict;
           break;
         default:
             break;
@@ -202,7 +238,8 @@ bool OOXMLStreamImpl::lcl_getTarget(uno::Reference<embed::XRelationshipAccess>
                 beans::StringPair aPair = aSeq[i];
 
                 if (aPair.First.compareTo(sType) == 0 &&
-                    aPair.Second.compareTo(sStreamType) == 0)
+                    ( aPair.Second.compareTo(sStreamType) == 0 ||
+                      aPair.Second.compareTo(sStreamTypeStrict) == 0))
                     bFound = true;
                 else if (aPair.First.compareTo(sId) == 0 &&
                          aPair.Second.compareTo(rId) == 0)


More information about the Libreoffice-commits mailing list