Module: wine Branch: master Commit: 6763841e19338abb3b72ba3d5684bc82cd63d139 URL: http://source.winehq.org/git/wine.git/?a=commit;h=6763841e19338abb3b72ba3d56...
Author: Juan Lang juan.lang@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(