diff options
author | Vasily Melenchuk <vasily.melenchuk@cib.de> | 2020-10-17 10:00:04 +0300 |
---|---|---|
committer | Thorsten Behrens <Thorsten.Behrens@CIB.de> | 2020-10-17 14:28:52 +0200 |
commit | dd4670b976b00d643f335516fe5fd0c880d58025 (patch) | |
tree | 3159983934deeb68802e0aec425e4a3c49a6048c /sfx2 | |
parent | 235eb9ec6065f7a0713f222dcf5d6d340b0e18e9 (diff) |
tdf#133771: remove encryption data during SaveAs
If document was password protected but during SaveAs it wasn't
selected to use a password we should remove EcnryptionData.
But we should not do this unconditionally: in general case we should
try to keep all encryption metadata.
Change-Id: Id91a88790deccd7377fb5d394b36395d13748c31
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104454
Tested-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
Diffstat (limited to 'sfx2')
-rw-r--r-- | sfx2/source/doc/objstor.cxx | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/sfx2/source/doc/objstor.cxx b/sfx2/source/doc/objstor.cxx index 76e838709b20..479682be31db 100644 --- a/sfx2/source/doc/objstor.cxx +++ b/sfx2/source/doc/objstor.cxx @@ -2789,11 +2789,38 @@ bool SfxObjectShell::PreDoSaveAs_Impl(const OUString& rFileName, const OUString& // in "SaveAs" title and password will be cleared ( maybe the new itemset contains new values, otherwise they will be empty ) // #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 ) - if (xMergedParams->HasItem( SID_PASSWORD )) + if (xMergedParams->HasItem(SID_ENCRYPTIONDATA)) { - xMergedParams->ClearItem( SID_PASSWORD ); - xMergedParams->ClearItem( SID_ENCRYPTIONDATA ); + bool bPasswordProtected = true; + const SfxUnoAnyItem* pEncryptionDataItem + = xMergedParams->GetItem<SfxUnoAnyItem>(SID_ENCRYPTIONDATA, false); + if (pEncryptionDataItem) + { + uno::Sequence<beans::NamedValue> aEncryptionData; + pEncryptionDataItem->GetValue() >>= aEncryptionData; + for (const auto& rItem : std::as_const(aEncryptionData)) + { + if (rItem.Name == "CryptoType") + { + OUString aValue; + rItem.Value >>= aValue; + if (aValue != "StrongEncryptionDataSpace") + { + // This is not just a password protected document. Let's keep encryption data as is. + bPasswordProtected = false; + } + break; + } + } + } + if (bPasswordProtected) + { + // For password protected documents remove encryption data during "Save as..." + xMergedParams->ClearItem(SID_PASSWORD); + xMergedParams->ClearItem(SID_ENCRYPTIONDATA); + } } + xMergedParams->ClearItem( SID_DOCINFO_TITLE ); xMergedParams->ClearItem( SID_INPUTSTREAM ); |