diff options
author | Vasily Melenchuk <vasily.melenchuk@cib.de> | 2019-10-14 00:01:52 +0300 |
---|---|---|
committer | Thorsten Behrens <Thorsten.Behrens@CIB.de> | 2019-11-15 12:50:38 +0100 |
commit | e0cced9d4c94324e834e46d807469a0cd6c1f738 (patch) | |
tree | 8d5e063a0ae2f46c937db21d0b9693bd51069180 /sfx2 | |
parent | e21f5796b1d0d34522cef3888a3e5d91b86c2c00 (diff) |
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 <Thorsten.Behrens@CIB.de>
Tested-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
Diffstat (limited to 'sfx2')
-rw-r--r-- | sfx2/source/dialog/filedlghelper.cxx | 9 | ||||
-rw-r--r-- | sfx2/source/doc/objserv.cxx | 6 | ||||
-rw-r--r-- | sfx2/source/doc/objstor.cxx | 8 |
3 files changed, 14 insertions, 9 deletions
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 ); |