Juan Lang : crypt32: Explicitly pass pointers to blob arrays rather than relying on an invalid alignment assumption .
Alexandre Julliard
julliard at winehq.org
Mon Oct 19 09:56:06 CDT 2009
Module: wine
Branch: master
Commit: 3000bc200aeb1917a8e61b403d5ff2c0dfaacbb2
URL: http://source.winehq.org/git/wine.git/?a=commit;h=3000bc200aeb1917a8e61b403d5ff2c0dfaacbb2
Author: Juan Lang <juan.lang at gmail.com>
Date: Thu Oct 15 16:23:17 2009 -0700
crypt32: Explicitly pass pointers to blob arrays rather than relying on an invalid alignment assumption.
---
dlls/crypt32/msg.c | 45 +++++++++++++++++++++++----------------------
1 files changed, 23 insertions(+), 22 deletions(-)
diff --git a/dlls/crypt32/msg.c b/dlls/crypt32/msg.c
index 8a88b75..b91e185 100644
--- a/dlls/crypt32/msg.c
+++ b/dlls/crypt32/msg.c
@@ -719,27 +719,22 @@ static BOOL CRYPT_ConstructBlob(CRYPT_DATA_BLOB *out, const CRYPT_DATA_BLOB *in)
return ret;
}
-typedef struct _BlobArray
-{
- DWORD cBlobs;
- PCRYPT_DATA_BLOB blobs;
-} BlobArray;
-
-static BOOL CRYPT_ConstructBlobArray(BlobArray *out, const BlobArray *in)
+static BOOL CRYPT_ConstructBlobArray(DWORD *outCBlobs,
+ PCRYPT_DATA_BLOB *outPBlobs, DWORD cBlobs, const PCRYPT_DATA_BLOB pBlobs)
{
BOOL ret = TRUE;
- out->cBlobs = in->cBlobs;
- if (out->cBlobs)
+ *outCBlobs = cBlobs;
+ if (cBlobs)
{
- out->blobs = CryptMemAlloc(out->cBlobs * sizeof(CRYPT_DATA_BLOB));
- if (out->blobs)
+ *outPBlobs = CryptMemAlloc(cBlobs * sizeof(CRYPT_DATA_BLOB));
+ if (*outPBlobs)
{
DWORD i;
- memset(out->blobs, 0, out->cBlobs * sizeof(CRYPT_DATA_BLOB));
- for (i = 0; ret && i < out->cBlobs; i++)
- ret = CRYPT_ConstructBlob(&out->blobs[i], &in->blobs[i]);
+ memset(*outPBlobs, 0, cBlobs * sizeof(CRYPT_DATA_BLOB));
+ for (i = 0; ret && i < cBlobs; i++)
+ ret = CRYPT_ConstructBlob(&(*outPBlobs)[i], &pBlobs[i]);
}
else
ret = FALSE;
@@ -747,6 +742,12 @@ static BOOL CRYPT_ConstructBlobArray(BlobArray *out, const BlobArray *in)
return ret;
}
+typedef struct _BlobArray
+{
+ DWORD cBlobs;
+ PCRYPT_DATA_BLOB blobs;
+} BlobArray;
+
static void CRYPT_FreeBlobArray(BlobArray *array)
{
DWORD i;
@@ -765,8 +766,8 @@ static BOOL CRYPT_ConstructAttribute(CRYPT_ATTRIBUTE *out,
if (out->pszObjId)
{
strcpy(out->pszObjId, in->pszObjId);
- ret = CRYPT_ConstructBlobArray((BlobArray *)&out->cValue,
- (const BlobArray *)&in->cValue);
+ ret = CRYPT_ConstructBlobArray(&out->cValue, &out->rgValue,
+ in->cValue, in->rgValue);
}
else
ret = FALSE;
@@ -1435,13 +1436,13 @@ static HCRYPTMSG CSignedEncodeMsg_Open(DWORD dwFlags,
}
}
if (ret)
- ret = CRYPT_ConstructBlobArray(
- (BlobArray *)&msg->msg_data.info->cCertEncoded,
- (const BlobArray *)&info->cCertEncoded);
+ ret = CRYPT_ConstructBlobArray(&msg->msg_data.info->cCertEncoded,
+ &msg->msg_data.info->rgCertEncoded, info->cCertEncoded,
+ info->rgCertEncoded);
if (ret)
- ret = CRYPT_ConstructBlobArray(
- (BlobArray *)&msg->msg_data.info->cCrlEncoded,
- (const BlobArray *)&info->cCrlEncoded);
+ ret = CRYPT_ConstructBlobArray(&msg->msg_data.info->cCrlEncoded,
+ &msg->msg_data.info->rgCrlEncoded, info->cCrlEncoded,
+ info->rgCrlEncoded);
if (!ret)
{
CSignedEncodeMsg_Close(msg);
More information about the wine-cvs
mailing list