Juan Lang : wintrust: Fail creating a chain if a store couldn't be created.

Alexandre Julliard julliard at winehq.org
Fri Jan 29 10:56:30 CST 2010


Module: wine
Branch: master
Commit: 711ca0f4f3a3ec1fcaffac8c47dce0bf316cf1cc
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=711ca0f4f3a3ec1fcaffac8c47dce0bf316cf1cc

Author: Juan Lang <juan.lang at gmail.com>
Date:   Wed Jan 27 14:14:53 2010 -0800

wintrust: Fail creating a chain if a store couldn't be created.

---

 dlls/wintrust/softpub.c |   64 +++++++++++++++++++++++++---------------------
 1 files changed, 35 insertions(+), 29 deletions(-)

diff --git a/dlls/wintrust/softpub.c b/dlls/wintrust/softpub.c
index 29d8523..a0a3455 100644
--- a/dlls/wintrust/softpub.c
+++ b/dlls/wintrust/softpub.c
@@ -771,46 +771,52 @@ static BOOL WINTRUST_CreateChainForSigner(CRYPT_PROVIDER_DATA *data,
             for (i = 0; i < data->chStores; i++)
                 CertAddStoreToCollection(store, data->pahStores[i], 0, 0);
         }
+        else
+            ret = FALSE;
     }
-    /* Expect the end certificate for each signer to be the only cert in the
-     * chain:
-     */
-    if (data->pasSigners[signer].csCertChain)
+    if (ret)
     {
-        /* Create a certificate chain for each signer */
-        ret = CertGetCertificateChain(createInfo->hChainEngine,
-         data->pasSigners[signer].pasCertChain[0].pCert,
-         &data->pasSigners[signer].sftVerifyAsOf, store,
-         chainPara, createInfo->dwFlags, createInfo->pvReserved,
-         &data->pasSigners[signer].pChainContext);
-        if (ret)
+        /* Expect the end certificate for each signer to be the only cert in
+         * the chain:
+         */
+        if (data->pasSigners[signer].csCertChain)
         {
-            if (data->pasSigners[signer].pChainContext->cChain != 1)
-            {
-                FIXME("unimplemented for more than 1 simple chain\n");
-                ret = FALSE;
-            }
-            else
+            /* Create a certificate chain for each signer */
+            ret = CertGetCertificateChain(createInfo->hChainEngine,
+             data->pasSigners[signer].pasCertChain[0].pCert,
+             &data->pasSigners[signer].sftVerifyAsOf, store,
+             chainPara, createInfo->dwFlags, createInfo->pvReserved,
+             &data->pasSigners[signer].pChainContext);
+            if (ret)
             {
-                DWORD err;
-
-                if (!(err = WINTRUST_CopyChain(data, signer)))
+                if (data->pasSigners[signer].pChainContext->cChain != 1)
                 {
-                    if (data->psPfns->pfnCertCheckPolicy)
-                        ret = data->psPfns->pfnCertCheckPolicy(data, signer,
-                         FALSE, 0);
-                    else
-                        TRACE("no cert check policy, skipping policy check\n");
+                    FIXME("unimplemented for more than 1 simple chain\n");
+                    ret = FALSE;
                 }
                 else
                 {
-                    SetLastError(err);
-                    ret = FALSE;
+                    DWORD err;
+
+                    if (!(err = WINTRUST_CopyChain(data, signer)))
+                    {
+                        if (data->psPfns->pfnCertCheckPolicy)
+                            ret = data->psPfns->pfnCertCheckPolicy(data, signer,
+                             FALSE, 0);
+                        else
+                            TRACE(
+                             "no cert check policy, skipping policy check\n");
+                    }
+                    else
+                    {
+                        SetLastError(err);
+                        ret = FALSE;
+                    }
                 }
             }
         }
+        CertCloseStore(store, 0);
     }
-    CertCloseStore(store, 0);
     return ret;
 }
 




More information about the wine-cvs mailing list