Juan Lang : crypt32: Make sure a signed encode message' s signer info is always initialized.

Alexandre Julliard julliard at winehq.org
Fri Oct 19 08:35:47 CDT 2007


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

Author: Juan Lang <juan.lang at gmail.com>
Date:   Thu Oct 18 20:47:30 2007 -0700

crypt32: Make sure a signed encode message's signer info is always initialized.

---

 dlls/crypt32/msg.c |   46 +++++++++++++++++++++++++++-------------------
 1 files changed, 27 insertions(+), 19 deletions(-)

diff --git a/dlls/crypt32/msg.c b/dlls/crypt32/msg.c
index 2d19736..38abd48 100644
--- a/dlls/crypt32/msg.c
+++ b/dlls/crypt32/msg.c
@@ -1248,33 +1248,41 @@ static HCRYPTMSG CSignedEncodeMsg_Open(DWORD dwFlags,
         }
         else
             ret = FALSE;
-        if (ret && info->cSigners)
+        if (ret)
         {
-            msg->msg_data.info->rgSignerInfo =
-             CryptMemAlloc(info->cSigners * sizeof(CMSG_SIGNER_INFO));
-            if (msg->msg_data.info->rgSignerInfo)
+            if (info->cSigners)
             {
-                msg->msg_data.info->cSignerInfo = info->cSigners;
-                memset(msg->msg_data.info->rgSignerInfo, 0,
-                 msg->msg_data.info->cSignerInfo * sizeof(CMSG_SIGNER_INFO));
-                ret = CSignedMsgData_AllocateHandles(&msg->msg_data);
-                for (i = 0; ret && i < msg->msg_data.info->cSignerInfo; i++)
+                msg->msg_data.info->rgSignerInfo =
+                 CryptMemAlloc(info->cSigners * sizeof(CMSG_SIGNER_INFO));
+                if (msg->msg_data.info->rgSignerInfo)
                 {
-                    ret = CSignerInfo_Construct(
-                     &msg->msg_data.info->rgSignerInfo[i],
-                     &info->rgSigners[i]);
-                    if (ret)
+                    msg->msg_data.info->cSignerInfo = info->cSigners;
+                    memset(msg->msg_data.info->rgSignerInfo, 0,
+                     msg->msg_data.info->cSignerInfo * sizeof(CMSG_SIGNER_INFO));
+                    ret = CSignedMsgData_AllocateHandles(&msg->msg_data);
+                    for (i = 0; ret && i < msg->msg_data.info->cSignerInfo; i++)
                     {
-                        ret = CSignedMsgData_ConstructSignerHandles(
-                         &msg->msg_data, i, info->rgSigners[i].hCryptProv);
-                        if (dwFlags & CMSG_CRYPT_RELEASE_CONTEXT_FLAG)
-                            CryptReleaseContext(info->rgSigners[i].hCryptProv,
-                             0);
+                        ret = CSignerInfo_Construct(
+                         &msg->msg_data.info->rgSignerInfo[i],
+                         &info->rgSigners[i]);
+                        if (ret)
+                        {
+                            ret = CSignedMsgData_ConstructSignerHandles(
+                             &msg->msg_data, i, info->rgSigners[i].hCryptProv);
+                            if (dwFlags & CMSG_CRYPT_RELEASE_CONTEXT_FLAG)
+                                CryptReleaseContext(info->rgSigners[i].hCryptProv,
+                                 0);
+                        }
                     }
                 }
+                else
+                    ret = FALSE;
             }
             else
-                ret = FALSE;
+            {
+                msg->msg_data.info->cSignerInfo = 0;
+                msg->msg_data.signerHandles = NULL;
+            }
         }
         if (ret)
             ret = CRYPT_ConstructBlobArray(




More information about the wine-cvs mailing list