From 1437d7ccc2b69de5c09e6a857d4b0bfa1a0ef56a Mon Sep 17 00:00:00 2001 From: Juan Lang Date: Thu, 15 Oct 2009 16:25:03 -0700 Subject: [PATCH] crypt32: Explicitly pass pointers to blob arrays rather than relying on an invalid alignment assumption. --- dlls/crypt32/msg.c | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/dlls/crypt32/msg.c b/dlls/crypt32/msg.c index b91e18579b5..825b6da96ff 100644 --- a/dlls/crypt32/msg.c +++ b/dlls/crypt32/msg.c @@ -742,19 +742,13 @@ static BOOL CRYPT_ConstructBlobArray(DWORD *outCBlobs, return ret; } -typedef struct _BlobArray -{ - DWORD cBlobs; - PCRYPT_DATA_BLOB blobs; -} BlobArray; - -static void CRYPT_FreeBlobArray(BlobArray *array) +static void CRYPT_FreeBlobArray(DWORD cBlobs, PCRYPT_DATA_BLOB blobs) { DWORD i; - for (i = 0; i < array->cBlobs; i++) - CryptMemFree(array->blobs[i].pbData); - CryptMemFree(array->blobs); + for (i = 0; i < cBlobs; i++) + CryptMemFree(blobs[i].pbData); + CryptMemFree(blobs); } static BOOL CRYPT_ConstructAttribute(CRYPT_ATTRIBUTE *out, @@ -1180,8 +1174,10 @@ static void CSignedEncodeMsg_Close(HCRYPTMSG hCryptMsg) CryptMemFree(msg->innerOID); CryptMemFree(msg->data.pbData); - CRYPT_FreeBlobArray((BlobArray *)&msg->msg_data.info->cCertEncoded); - CRYPT_FreeBlobArray((BlobArray *)&msg->msg_data.info->cCrlEncoded); + CRYPT_FreeBlobArray(msg->msg_data.info->cCertEncoded, + msg->msg_data.info->rgCertEncoded); + CRYPT_FreeBlobArray(msg->msg_data.info->cCrlEncoded, + msg->msg_data.info->rgCrlEncoded); for (i = 0; i < msg->msg_data.info->cSignerInfo; i++) CSignerInfo_Free(&msg->msg_data.info->rgSignerInfo[i]); CSignedMsgData_CloseHandles(&msg->msg_data);