package/source/zippackage/ZipPackage.cxx |   20 +-------------------
 sfx2/source/dialog/filedlghelper.cxx     |    9 +++++++--
 sfx2/source/doc/objserv.cxx              |    6 ++----
 sfx2/source/doc/objstor.cxx              |    8 +++++---
 4 files changed, 15 insertions(+), 28 deletions(-)

New commits:
commit e0cced9d4c94324e834e46d807469a0cd6c1f738
Author:     Vasily Melenchuk <[email protected]>
AuthorDate: Mon Oct 14 00:01:52 2019 +0300
Commit:     Thorsten Behrens <[email protected]>
CommitDate: Fri Nov 15 12:50:38 2019 +0100

    do not clean up EncryptionData during SaveAs
    
    As the SID_ENCRYPTIONDATA and SID_PASSWORD are used for setting
    password together, EncryptionData should be removed only
    when Password was set (reset of Password protection for the document).
    Elsewhere EncryptionData should remain as is, while it could
    contain encryption data used for opened document.
    
    Change-Id: I46b757af81e68ad4781e83b1a0e0b6da3a5e13e1
    Change-Id: I1213ec55d6dc42f062930467976de45c73152f0b
    Reviewed-on: https://gerrit.libreoffice.org/82616
    Reviewed-by: Thorsten Behrens <[email protected]>
    Tested-by: Thorsten Behrens <[email protected]>

diff --git a/package/source/zippackage/ZipPackage.cxx 
b/package/source/zippackage/ZipPackage.cxx
index 7b2e705e45e5..63178c7fec24 100644
--- a/package/source/zippackage/ZipPackage.cxx
+++ b/package/source/zippackage/ZipPackage.cxx
@@ -1748,27 +1748,9 @@ void SAL_CALL ZipPackage::setPropertyValue( const 
OUString& aPropertyName, const
         // this property is only necessary to support raw passwords in storage 
API;
         // because of this support the storage has to operate with more than 
one key dependent on storage generation algorithm;
         // when this support is removed, the storage will get only one key 
from outside
-        uno::Sequence< beans::NamedValue > aKeys;
-        if ( !( aValue >>= aKeys ) )
+        if ( !( aValue >>= m_aStorageEncryptionKeys ) )
             throw IllegalArgumentException(THROW_WHERE, uno::Reference< 
uno::XInterface >(), 2 );
 
-        if ( aKeys.hasElements() )
-        {
-            bool bHasSHA256 = false;
-            bool bHasSHA1 = false;
-            for ( const auto& rKey : std::as_const(aKeys) )
-            {
-                if ( rKey.Name == PACKAGE_ENCRYPTIONDATA_SHA256UTF8 )
-                    bHasSHA256 = true;
-                if ( rKey.Name == PACKAGE_ENCRYPTIONDATA_SHA1UTF8 )
-                    bHasSHA1 = true;
-            }
-
-            if ( !bHasSHA256 && !bHasSHA1 )
-                throw IllegalArgumentException(THROW_WHERE "Expected keys are 
not provided!", uno::Reference< uno::XInterface >(), 2 );
-        }
-
-        m_aStorageEncryptionKeys = aKeys;
         m_aEncryptionKey.realloc( 0 );
     }
     else if ( aPropertyName == ENCRYPTION_ALGORITHMS_PROPERTY )
diff --git a/sfx2/source/dialog/filedlghelper.cxx 
b/sfx2/source/dialog/filedlghelper.cxx
index a6a9dc675054..e5fad08ec881 100644
--- a/sfx2/source/dialog/filedlghelper.cxx
+++ b/sfx2/source/dialog/filedlghelper.cxx
@@ -1414,8 +1414,13 @@ ErrCode FileDialogHelper_Impl::execute( 
std::vector<OUString>& rpURLList,
 
         // the password will be set in case user decide so
         rpSet->ClearItem( SID_PASSWORDINTERACTION );
-        rpSet->ClearItem( SID_PASSWORD );
-        rpSet->ClearItem( SID_ENCRYPTIONDATA );
+        if (rpSet->HasItem( SID_PASSWORD ))
+        {
+            // As the SID_ENCRYPTIONDATA and SID_PASSWORD are using for 
setting password together, we need to clear them both.
+            // Note: Do not remove SID_ENCRYPTIONDATA without SID_PASSWORD
+            rpSet->ClearItem( SID_PASSWORD );
+            rpSet->ClearItem( SID_ENCRYPTIONDATA );
+        }
         rpSet->ClearItem( SID_RECOMMENDREADONLY );
         rpSet->ClearItem( SID_MODIFYPASSWORDINFO );
 
diff --git a/sfx2/source/doc/objserv.cxx b/sfx2/source/doc/objserv.cxx
index 24cfa8afd294..512fe81d6efd 100644
--- a/sfx2/source/doc/objserv.cxx
+++ b/sfx2/source/doc/objserv.cxx
@@ -809,11 +809,9 @@ void SfxObjectShell::ExecFile_Impl(SfxRequest &rReq)
                 }
 
 
-                bool bPreselectPassword = false;
-                const SfxUnoAnyItem* pOldEncryptionDataItem = 
SfxItemSet::GetItem<SfxUnoAnyItem>(GetMedium()->GetItemSet(), 
SID_ENCRYPTIONDATA, false);
                 const SfxStringItem* pOldPasswordItem = 
SfxItemSet::GetItem<SfxStringItem>(GetMedium()->GetItemSet(), SID_PASSWORD, 
false);
-                if ( pOldEncryptionDataItem || pOldPasswordItem )
-                    bPreselectPassword = true;
+                const SfxUnoAnyItem* pOldEncryptionDataItem = 
SfxItemSet::GetItem<SfxUnoAnyItem>(GetMedium()->GetItemSet(), 
SID_ENCRYPTIONDATA, false);
+                bool bPreselectPassword = (pOldPasswordItem && 
pOldEncryptionDataItem);
 
                 uno::Sequence< beans::PropertyValue > aDispatchArgs;
                 if ( rReq.GetArgs() )
diff --git a/sfx2/source/doc/objstor.cxx b/sfx2/source/doc/objstor.cxx
index f162bd5dfa92..174b06c761f3 100644
--- a/sfx2/source/doc/objstor.cxx
+++ b/sfx2/source/doc/objstor.cxx
@@ -2764,11 +2764,13 @@ bool SfxObjectShell::PreDoSaveAs_Impl(const OUString& 
rFileName, const OUString&
     std::unique_ptr<SfxAllItemSet> pMergedParams(new SfxAllItemSet( 
*pMedium->GetItemSet() ));
 
     // in "SaveAs" title and password will be cleared ( maybe the new itemset 
contains new values, otherwise they will be empty )
-    pMergedParams->ClearItem( SID_ENCRYPTIONDATA );
-    pMergedParams->ClearItem( SID_PASSWORD );
     // #i119366# - As the SID_ENCRYPTIONDATA and SID_PASSWORD are using for 
setting password together, we need to clear them both.
     // Also, ( maybe the new itemset contains new values, otherwise they will 
be empty )
-    pMergedParams->ClearItem( SID_ENCRYPTIONDATA );
+    if (pMergedParams->HasItem( SID_PASSWORD ))
+    {
+        pMergedParams->ClearItem( SID_PASSWORD );
+        pMergedParams->ClearItem( SID_ENCRYPTIONDATA );
+    }
     pMergedParams->ClearItem( SID_DOCINFO_TITLE );
 
     pMergedParams->ClearItem( SID_INPUTSTREAM );
_______________________________________________
Libreoffice-commits mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to