wintrust(9/10): Use a helper function to get a signer's cert info from a message

Juan Lang juan.lang at gmail.com
Mon Aug 27 18:36:49 CDT 2007


--Juan
-------------- next part --------------
From 3aa7eaaa02006a2a86a00bef61c39229a5984430 Mon Sep 17 00:00:00 2001
From: Juan Lang <juanlang at juan.corp.google.com>
Date: Mon, 27 Aug 2007 16:30:12 -0700
Subject: [PATCH] Use a helper function to get a signer's cert info from a message
---
 dlls/wintrust/softpub.c |   74 ++++++++++++++++++++++++++++-------------------
 1 files changed, 44 insertions(+), 30 deletions(-)

diff --git a/dlls/wintrust/softpub.c b/dlls/wintrust/softpub.c
index 4b6b33a..caab601 100644
--- a/dlls/wintrust/softpub.c
+++ b/dlls/wintrust/softpub.c
@@ -292,6 +292,34 @@ error:
     return ret ? S_OK : S_FALSE;
 }
 
+static CERT_INFO *WINTRUST_GetSignerCertInfo(CRYPT_PROVIDER_DATA *data,
+ DWORD signerIdx)
+{
+    BOOL ret;
+    CERT_INFO *certInfo = NULL;
+    DWORD size;
+
+    ret = CryptMsgGetParam(data->hMsg, CMSG_SIGNER_CERT_INFO_PARAM, signerIdx,
+     NULL, &size);
+    if (ret)
+    {
+        certInfo = data->psPfns->pfnAlloc(size);
+        if (certInfo)
+        {
+            ret = CryptMsgGetParam(data->hMsg, CMSG_SIGNER_CERT_INFO_PARAM,
+             signerIdx, certInfo, &size);
+            if (!ret)
+            {
+                data->psPfns->pfnFree(certInfo);
+                certInfo = NULL;
+            }
+        }
+        else
+            SetLastError(ERROR_OUTOFMEMORY);
+    }
+    return certInfo;
+}
+
 HRESULT WINAPI SoftpubLoadSignature(CRYPT_PROVIDER_DATA *data)
 {
     BOOL ret;
@@ -311,45 +339,31 @@ HRESULT WINAPI SoftpubLoadSignature(CRYP
 
         for (i = 0; ret && i < signerCount; i++)
         {
-            ret = CryptMsgGetParam(data->hMsg, CMSG_SIGNER_CERT_INFO_PARAM,
-             i, NULL, &size);
-            if (ret)
+            CERT_INFO *certInfo = WINTRUST_GetSignerCertInfo(data, i);
+
+            if (certInfo)
             {
-                CERT_INFO *certInfo = data->psPfns->pfnAlloc(size);
+                CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA para = { sizeof(para), 0, i,
+                 CMSG_VERIFY_SIGNER_CERT, NULL };
 
-                if (certInfo)
+                para.pvSigner = (LPVOID)CertGetSubjectCertificateFromStore(
+                 data->pahStores[0], data->dwEncoding, certInfo);
+                if (para.pvSigner)
                 {
-                    ret = CryptMsgGetParam(data->hMsg,
-                     CMSG_SIGNER_CERT_INFO_PARAM, i, certInfo, &size);
-                    if (ret)
-                    {
-                        CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA para = {
-                         sizeof(para), 0, i, CMSG_VERIFY_SIGNER_CERT, NULL };
-
-                        para.pvSigner =
-                         (LPVOID)CertGetSubjectCertificateFromStore(
-                         data->pahStores[0], data->dwEncoding, certInfo);
-                        if (para.pvSigner)
-                        {
-                            ret = CryptMsgControl(data->hMsg, 0,
-                             CMSG_CTRL_VERIFY_SIGNATURE_EX, &para);
-                            if (!ret)
-                                SetLastError(TRUST_E_CERT_SIGNATURE);
-                        }
-                        else
-                        {
-                            SetLastError(TRUST_E_NO_SIGNER_CERT);
-                            ret = FALSE;
-                        }
-                    }
-                    data->psPfns->pfnFree(certInfo);
+                    ret = CryptMsgControl(data->hMsg, 0,
+                     CMSG_CTRL_VERIFY_SIGNATURE_EX, &para);
+                    if (!ret)
+                        SetLastError(TRUST_E_CERT_SIGNATURE);
                 }
                 else
                 {
-                    SetLastError(ERROR_OUTOFMEMORY);
+                    SetLastError(TRUST_E_NO_SIGNER_CERT);
                     ret = FALSE;
                 }
+                data->psPfns->pfnFree(certInfo);
             }
+            else
+                ret = FALSE;
         }
     }
     else
-- 
1.4.1



More information about the wine-patches mailing list