diff options
-rw-r--r-- | package/source/zippackage/ZipPackage.cxx | 20 | ||||
-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 |
4 files changed, 15 insertions, 28 deletions
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 ); |