Hello,

this patch should ensure that we write the password algorithm only to odf
1.2 and later files.

I'm not quite sure how important it is to be 100% standard compliant so I
don't know if we should include it into 3-4.

Regards,
Markus
From 0bdea28c21531d6d09858e926915e325dd70212c Mon Sep 17 00:00:00 2001
From: Markus Mohrhard <[email protected]>
Date: Fri, 5 Aug 2011 21:51:31 +0200
Subject: [PATCH] fix for fdo#39678: don't write password algorithm in odf 1.0 and 1.1

---
 sc/source/filter/xml/xmlexprt.cxx |   51 +++++++++++++++++++++++++-----------
 sc/source/filter/xml/xmlexprt.hxx |    2 +
 2 files changed, 37 insertions(+), 16 deletions(-)

diff --git a/sc/source/filter/xml/xmlexprt.cxx b/sc/source/filter/xml/xmlexprt.cxx
index 4a5eecb..99c2ebd 100644
--- a/sc/source/filter/xml/xmlexprt.cxx
+++ b/sc/source/filter/xml/xmlexprt.cxx
@@ -1525,16 +1525,19 @@ void ScXMLExport::SetBodyAttributes()
         if (aBuffer.getLength())
         {
             AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTION_KEY, aBuffer.makeStringAndClear());
-            if (eHashUsed == PASSHASH_XL)
+            if ( IsOdfVersionGreaterEqual_1_2() )
             {
-                AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTION_KEY_DIGEST_ALGORITHM,
-                             ScPassHashHelper::getHashURI(PASSHASH_XL));
-                AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTION_KEY_DIGEST_ALGORITHM_2,
-                             ScPassHashHelper::getHashURI(PASSHASH_SHA1));
+                if (eHashUsed == PASSHASH_XL)
+                {
+                    AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTION_KEY_DIGEST_ALGORITHM,
+                                 ScPassHashHelper::getHashURI(PASSHASH_XL));
+                    AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTION_KEY_DIGEST_ALGORITHM_2,
+                                 ScPassHashHelper::getHashURI(PASSHASH_SHA1));
+                }
+                else if (eHashUsed == PASSHASH_SHA1)
+                    AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTION_KEY_DIGEST_ALGORITHM,
+                                 ScPassHashHelper::getHashURI(PASSHASH_SHA1));
             }
-            else if (eHashUsed == PASSHASH_SHA1)
-                AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTION_KEY_DIGEST_ALGORITHM,
-                             ScPassHashHelper::getHashURI(PASSHASH_SHA1));
         }
     }
 }
@@ -1648,6 +1651,19 @@ void ScXMLExport::CopySourceStream( sal_Int32 nStartOffset, sal_Int32 nEndOffset
     }
 }
 
+bool ScXMLExport::IsOdfVersionGreaterEqual_1_2()
+{
+    switch(getDefaultVersion())
+    {
+        case SvtSaveOptions::ODFVER_010:
+        case SvtSaveOptions::ODFVER_011:
+            return false;
+        default:
+            break;
+    }
+    return true;
+}
+
 void ScXMLExport::_ExportContent()
 {
     nCurrentTable = 0;
@@ -2695,16 +2711,19 @@ void ScXMLExport::WriteTable(sal_Int32 nTable, const Reference<sheet::XSpreadshe
                 if (aBuffer.getLength())
                 {
                     AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTION_KEY, aBuffer.makeStringAndClear());
-                    if (eHashUsed == PASSHASH_XL)
+                    if ( IsOdfVersionGreaterEqual_1_2() )
                     {
-                        AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTION_KEY_DIGEST_ALGORITHM,
-                                     ScPassHashHelper::getHashURI(PASSHASH_XL));
-                        AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTION_KEY_DIGEST_ALGORITHM_2,
-                                     ScPassHashHelper::getHashURI(PASSHASH_SHA1));
+                        if (eHashUsed == PASSHASH_XL)
+                        {
+                            AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTION_KEY_DIGEST_ALGORITHM,
+                                         ScPassHashHelper::getHashURI(PASSHASH_XL));
+                            AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTION_KEY_DIGEST_ALGORITHM_2,
+                                         ScPassHashHelper::getHashURI(PASSHASH_SHA1));
+                        }
+                        else if (eHashUsed == PASSHASH_SHA1)
+                            AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTION_KEY_DIGEST_ALGORITHM,
+                                         ScPassHashHelper::getHashURI(PASSHASH_SHA1));
                     }
-                    else if (eHashUsed == PASSHASH_SHA1)
-                        AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTION_KEY_DIGEST_ALGORITHM,
-                                     ScPassHashHelper::getHashURI(PASSHASH_SHA1));
                 }
             }
         }
diff --git a/sc/source/filter/xml/xmlexprt.hxx b/sc/source/filter/xml/xmlexprt.hxx
index 2fb3ac4..54d6d60 100644
--- a/sc/source/filter/xml/xmlexprt.hxx
+++ b/sc/source/filter/xml/xmlexprt.hxx
@@ -223,6 +223,8 @@ class ScXMLExport : public SvXMLExport
 
     void CopySourceStream( sal_Int32 nStartOffset, sal_Int32 nEndOffset, sal_Int32& rNewStart, sal_Int32& rNewEnd );
 
+    bool IsOdfVersionGreaterEqual_1_2();
+
 protected:
     virtual SvXMLAutoStylePoolP* CreateAutoStylePool();
     virtual XMLPageExport* CreatePageExport();
-- 
1.7.3.4

_______________________________________________
LibreOffice mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to