You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by or...@apache.org on 2012/06/26 16:48:59 UTC

svn commit: r1354039 - in /incubator/ooo/trunk/main/sfx2/source/doc: objstor.cxx sfxbasemodel.cxx

Author: orw
Date: Tue Jun 26 14:48:58 2012
New Revision: 1354039

URL: http://svn.apache.org/viewvc?rev=1354039&view=rev
Log:
119366 - assure that password can be removed from a document via "Save As..."

         Found by: DonJaime <donjaime at freenet dot de>
         Patch by: zhengfan <zheng.easyfan at gmail dot com>
         Review by: Oliver <orw at apache dot org>

Modified:
    incubator/ooo/trunk/main/sfx2/source/doc/objstor.cxx
    incubator/ooo/trunk/main/sfx2/source/doc/sfxbasemodel.cxx

Modified: incubator/ooo/trunk/main/sfx2/source/doc/objstor.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/sfx2/source/doc/objstor.cxx?rev=1354039&r1=1354038&r2=1354039&view=diff
==============================================================================
--- incubator/ooo/trunk/main/sfx2/source/doc/objstor.cxx (original)
+++ incubator/ooo/trunk/main/sfx2/source/doc/objstor.cxx Tue Jun 26 14:48:58 2012
@@ -2919,6 +2919,9 @@ sal_Bool SfxObjectShell::PreDoSaveAs_Imp
 
     // in "SaveAs" title and password will be cleared ( maybe the new itemset contains new values, otherwise they will be empty )
     pMergedParams->ClearItem( SID_PASSWORD );
+    // 119366 - As the SID_ENCRYPTIONDATA and SID_PASSWORD are using for setting passward together, we need to clear them both.
+    // Also, ( maybe the new itemset contains new values, otherwise they will be empty )
+    pMergedParams->ClearItem( SID_ENCRYPTIONDATA );
     pMergedParams->ClearItem( SID_DOCINFO_TITLE );
 
     pMergedParams->ClearItem( SID_INPUTSTREAM );

Modified: incubator/ooo/trunk/main/sfx2/source/doc/sfxbasemodel.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/sfx2/source/doc/sfxbasemodel.cxx?rev=1354039&r1=1354038&r2=1354039&view=diff
==============================================================================
--- incubator/ooo/trunk/main/sfx2/source/doc/sfxbasemodel.cxx (original)
+++ incubator/ooo/trunk/main/sfx2/source/doc/sfxbasemodel.cxx Tue Jun 26 14:48:58 2012
@@ -2788,41 +2788,53 @@ void SfxBaseModel::impl_store(  const   
                 const SfxFilter* pFilter = pMedium->GetFilter();
                 if ( pFilter && aFilterName.equals( pFilter->GetFilterName() ) )
                 {
-                    aArgHash.erase( aFilterString );
-                    aArgHash.erase( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "URL" ) ) );
-
-                    try
+                    // 119366 - If the former file saving with password, do not trying in StoreSelf anyway...
+                    bool bFormerPassword = false;
                     {
-                        storeSelf( aArgHash.getAsConstPropertyValueList() );
-                        bSaved = sal_True;
+                        uno::Sequence< beans::NamedValue > aOldEncryptionData;
+                        if (GetEncryptionData_Impl( pMedium->GetItemSet(), aOldEncryptionData ))
+                        {
+                            bFormerPassword = true;
+                        }
                     }
-                    catch( const lang::IllegalArgumentException& )
+                    if ( !bFormerPassword )
                     {
-                        // some additional arguments do not allow to use saving, SaveAs should be done
-                        // but only for normal documents, the shared documents would be overwritten in this case
-                        // that would mean an information loss
-                        // TODO/LATER: need a new interaction for this case
-                        if ( m_pData->m_pObjectShell->IsDocShared() )
-                        {
-                            m_pData->m_pObjectShell->AddLog( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "Can't store shared document!" ) ) );
-                            m_pData->m_pObjectShell->StoreLog();
+                        aArgHash.erase( aFilterString );
+                        aArgHash.erase( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "URL" ) ) );
 
-                            uno::Sequence< beans::NamedValue > aNewEncryptionData = aArgHash.getUnpackedValueOrDefault( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "EncryptionData" ) ), uno::Sequence< beans::NamedValue >() );
-                            if ( !aNewEncryptionData.getLength() )
+                        try
+                        {
+                            storeSelf( aArgHash.getAsConstPropertyValueList() );
+                            bSaved = sal_True;
+                        }
+                        catch( const lang::IllegalArgumentException& )
+                        {
+                            // some additional arguments do not allow to use saving, SaveAs should be done
+                            // but only for normal documents, the shared documents would be overwritten in this case
+                            // that would mean an information loss
+                            // TODO/LATER: need a new interaction for this case
+                            if ( m_pData->m_pObjectShell->IsDocShared() )
                             {
-                                ::rtl::OUString aNewPassword = aArgHash.getUnpackedValueOrDefault( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Password" ) ), ::rtl::OUString() );
-                                aNewEncryptionData = ::comphelper::OStorageHelper::CreatePackageEncryptionData( aNewPassword );
-                            }
+                                m_pData->m_pObjectShell->AddLog( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "Can't store shared document!" ) ) );
+                                m_pData->m_pObjectShell->StoreLog();
 
-                            uno::Sequence< beans::NamedValue > aOldEncryptionData;
-                            GetEncryptionData_Impl( pMedium->GetItemSet(), aOldEncryptionData );
+                                uno::Sequence< beans::NamedValue > aNewEncryptionData = aArgHash.getUnpackedValueOrDefault( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "EncryptionData" ) ), uno::Sequence< beans::NamedValue >() );
+                                if ( !aNewEncryptionData.getLength() )
+                                {
+                                    ::rtl::OUString aNewPassword = aArgHash.getUnpackedValueOrDefault( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Password" ) ), ::rtl::OUString() );
+                                    aNewEncryptionData = ::comphelper::OStorageHelper::CreatePackageEncryptionData( aNewPassword );
+                                }
 
-                            if ( !aOldEncryptionData.getLength() && !aNewEncryptionData.getLength() )
-                                throw;
-                            else
-                            {
-                                // if the password is changed a special error should be used in case of shared document
-                                throw task::ErrorCodeIOException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Cant change password for shared document." ) ), uno::Reference< uno::XInterface >(), ERRCODE_SFX_SHARED_NOPASSWORDCHANGE );
+                                uno::Sequence< beans::NamedValue > aOldEncryptionData;
+                                GetEncryptionData_Impl( pMedium->GetItemSet(), aOldEncryptionData );
+
+                                if ( !aOldEncryptionData.getLength() && !aNewEncryptionData.getLength() )
+                                    throw;
+                                else
+                                {
+                                    // if the password is changed a special error should be used in case of shared document
+                                    throw task::ErrorCodeIOException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Cant change password for shared document." ) ), uno::Reference< uno::XInterface >(), ERRCODE_SFX_SHARED_NOPASSWORDCHANGE );
+                                }
                             }
                         }
                     }