[Libreoffice-commits] core.git: xmlsecurity/source

Jian Fang Zhang zhangjf at apache.org
Thu May 16 08:27:29 PDT 2013


 xmlsecurity/source/xmlsec/mscrypt/securityenvironment_mscryptimpl.cxx |   61 ++++++----
 xmlsecurity/source/xmlsec/mscrypt/securityenvironment_mscryptimpl.hxx |    6 
 2 files changed, 48 insertions(+), 19 deletions(-)

New commits:
commit 3d8a7a435c2e97a02ccca30352a71e68ab112dfc
Author: Jian Fang Zhang <zhangjf at apache.org>
Date:   Tue Sep 4 01:46:03 2012 +0000

    Resolves: #i120675# the certificate store handles need to be closed
    
    after closing the document
    
    Found by: zhangjf
    Patch by: zhangjf
    (cherry picked from commit 33d9584bb6d285de1d935bf23adbb2c7666656f4)
    
    Change-Id: I131a17276f33059eb944fc34272c50f838b6973f

diff --git a/xmlsecurity/source/xmlsec/mscrypt/securityenvironment_mscryptimpl.cxx b/xmlsecurity/source/xmlsec/mscrypt/securityenvironment_mscryptimpl.cxx
index 3bdcd56..ef23b20 100644
--- a/xmlsecurity/source/xmlsec/mscrypt/securityenvironment_mscryptimpl.cxx
+++ b/xmlsecurity/source/xmlsec/mscrypt/securityenvironment_mscryptimpl.cxx
@@ -104,7 +104,7 @@ void traceTrustStatus(DWORD err)
     }
 }
 
-SecurityEnvironment_MSCryptImpl :: SecurityEnvironment_MSCryptImpl( const Reference< XMultiServiceFactory >& aFactory ) : m_hProv( NULL ) , m_pszContainer( NULL ) , m_hKeyStore( NULL ), m_hCertStore( NULL ), m_tSymKeyList() , m_tPubKeyList() , m_tPriKeyList(), m_xServiceManager( aFactory ), m_bEnableDefault( sal_False ) {
+SecurityEnvironment_MSCryptImpl :: SecurityEnvironment_MSCryptImpl( const Reference< XMultiServiceFactory >& aFactory ) : m_hProv( NULL ) , m_pszContainer( NULL ) , m_hKeyStore( NULL ), m_hCertStore( NULL ), m_tSymKeyList() , m_tPubKeyList() , m_tPriKeyList(), m_xServiceManager( aFactory ), m_bEnableDefault( sal_False ), m_hMySystemStore(NULL), m_hRootSystemStore(NULL), m_hTrustSystemStore(NULL), m_hCaSystemStore(NULL){
 
 }
 
@@ -130,6 +130,27 @@ SecurityEnvironment_MSCryptImpl :: ~SecurityEnvironment_MSCryptImpl() {
         m_hKeyStore = NULL ;
     }
 
+    //i120675, close the store handles
+    if( m_hMySystemStore != NULL ) {
+        CertCloseStore( m_hMySystemStore, CERT_CLOSE_STORE_CHECK_FLAG ) ;
+        m_hMySystemStore = NULL ;
+    }
+
+    if( m_hRootSystemStore != NULL ) {
+        CertCloseStore( m_hRootSystemStore, CERT_CLOSE_STORE_CHECK_FLAG ) ;
+        m_hRootSystemStore = NULL ;
+    }
+
+    if( m_hTrustSystemStore != NULL ) {
+        CertCloseStore( m_hTrustSystemStore, CERT_CLOSE_STORE_CHECK_FLAG ) ;
+        m_hTrustSystemStore = NULL ;
+    }
+
+    if( m_hCaSystemStore != NULL ) {
+        CertCloseStore( m_hCaSystemStore, CERT_CLOSE_STORE_CHECK_FLAG ) ;
+        m_hCaSystemStore = NULL ;
+    }
+
     if( !m_tSymKeyList.empty()  ) {
         std::list< HCRYPTKEY >::iterator symKeyIt ;
 
@@ -1210,40 +1231,42 @@ xmlSecKeysMngrPtr SecurityEnvironment_MSCryptImpl :: createKeysManager() throw(
      * Adopt system default certificate store.
      */
     if( defaultEnabled() ) {
-        HCERTSTORE hSystemStore ;
-
         //Add system key store into the keys manager.
-        hSystemStore = CertOpenSystemStore( 0, "MY" ) ;
-        if( hSystemStore != NULL ) {
-            if( xmlSecMSCryptoAppliedKeysMngrAdoptKeyStore( pKeysMngr, hSystemStore ) < 0 ) {
-                CertCloseStore( hSystemStore, CERT_CLOSE_STORE_CHECK_FLAG ) ;
+        m_hMySystemStore = CertOpenSystemStore( 0, "MY" ) ;
+        if( m_hMySystemStore != NULL ) {
+            if( xmlSecMSCryptoAppliedKeysMngrAdoptKeyStore( pKeysMngr, m_hMySystemStore ) < 0 ) {
+                CertCloseStore( m_hMySystemStore, CERT_CLOSE_STORE_CHECK_FLAG ) ;
+                m_hMySystemStore = NULL;
                 throw RuntimeException() ;
             }
         }
 
         //Add system root store into the keys manager.
-        hSystemStore = CertOpenSystemStore( 0, "Root" ) ;
-        if( hSystemStore != NULL ) {
-            if( xmlSecMSCryptoAppliedKeysMngrAdoptTrustedStore( pKeysMngr, hSystemStore ) < 0 ) {
-                CertCloseStore( hSystemStore, CERT_CLOSE_STORE_CHECK_FLAG ) ;
+        m_hRootSystemStore = CertOpenSystemStore( 0, "Root" ) ;
+        if( m_hRootSystemStore != NULL ) {
+            if( xmlSecMSCryptoAppliedKeysMngrAdoptTrustedStore( pKeysMngr, m_hRootSystemStore ) < 0 ) {
+                CertCloseStore( m_hRootSystemStore, CERT_CLOSE_STORE_CHECK_FLAG ) ;
+                m_hRootSystemStore = NULL;
                 throw RuntimeException() ;
             }
         }
 
         //Add system trusted store into the keys manager.
-        hSystemStore = CertOpenSystemStore( 0, "Trust" ) ;
-        if( hSystemStore != NULL ) {
-            if( xmlSecMSCryptoAppliedKeysMngrAdoptUntrustedStore( pKeysMngr, hSystemStore ) < 0 ) {
-                CertCloseStore( hSystemStore, CERT_CLOSE_STORE_CHECK_FLAG ) ;
+        m_hTrustSystemStore = CertOpenSystemStore( 0, "Trust" ) ;
+        if( m_hTrustSystemStore != NULL ) {
+            if( xmlSecMSCryptoAppliedKeysMngrAdoptUntrustedStore( pKeysMngr, m_hTrustSystemStore ) < 0 ) {
+                CertCloseStore( m_hTrustSystemStore, CERT_CLOSE_STORE_CHECK_FLAG ) ;
+                m_hTrustSystemStore = NULL;
                 throw RuntimeException() ;
             }
         }
 
         //Add system CA store into the keys manager.
-        hSystemStore = CertOpenSystemStore( 0, "CA" ) ;
-        if( hSystemStore != NULL ) {
-            if( xmlSecMSCryptoAppliedKeysMngrAdoptUntrustedStore( pKeysMngr, hSystemStore ) < 0 ) {
-                CertCloseStore( hSystemStore, CERT_CLOSE_STORE_CHECK_FLAG ) ;
+        m_hCaSystemStore = CertOpenSystemStore( 0, "CA" ) ;
+        if( m_hCaSystemStore != NULL ) {
+            if( xmlSecMSCryptoAppliedKeysMngrAdoptUntrustedStore( pKeysMngr, m_hCaSystemStore ) < 0 ) {
+                CertCloseStore( m_hCaSystemStore, CERT_CLOSE_STORE_CHECK_FLAG ) ;
+                m_hCaSystemStore = NULL;
                 throw RuntimeException() ;
             }
         }
diff --git a/xmlsecurity/source/xmlsec/mscrypt/securityenvironment_mscryptimpl.hxx b/xmlsecurity/source/xmlsec/mscrypt/securityenvironment_mscryptimpl.hxx
index 2335243..5a5101a 100644
--- a/xmlsecurity/source/xmlsec/mscrypt/securityenvironment_mscryptimpl.hxx
+++ b/xmlsecurity/source/xmlsec/mscrypt/securityenvironment_mscryptimpl.hxx
@@ -68,6 +68,12 @@ class SecurityEnvironment_MSCryptImpl : public ::cppu::WeakImplHelper4<
         //Certiticate store
         HCERTSTORE                          m_hCertStore ;
 
+        // i120675, save the store handles
+        HCERTSTORE                          m_hMySystemStore;
+        HCERTSTORE                          m_hRootSystemStore;
+        HCERTSTORE                          m_hTrustSystemStore;
+        HCERTSTORE                          m_hCaSystemStore;
+
         //Enable default system cryptography setting
         sal_Bool                            m_bEnableDefault ;
 


More information about the Libreoffice-commits mailing list