Module: wine Branch: master Commit: d5d3efd592e55f1f3c4de9f24488128a35d59cb3 URL: http://source.winehq.org/git/wine.git/?a=commit;h=d5d3efd592e55f1f3c4de9f244...
Author: Alexandre Julliard julliard@winehq.org Date: Mon Jun 22 14:53:24 2009 +0200
crypt32: Fix a couple of assumptions about structure layout.
---
dlls/crypt32/decode.c | 2 +- dlls/crypt32/encode.c | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/dlls/crypt32/decode.c b/dlls/crypt32/decode.c index 2c2b543..7a33e6a 100644 --- a/dlls/crypt32/decode.c +++ b/dlls/crypt32/decode.c @@ -523,7 +523,7 @@ static BOOL CRYPT_AsnDecodeSequence(struct AsnDecodeSequenceItem items[], for (i = 0; i < cItem; i++) { bytesNeeded += items[i].size; - structSize += items[i].minSize; + structSize = max( structSize, items[i].offset + items[i].minSize ); } if (pcbDecoded) *pcbDecoded = 1 + lenBytes + cbDecoded; diff --git a/dlls/crypt32/encode.c b/dlls/crypt32/encode.c index 67a0155..258384c 100644 --- a/dlls/crypt32/encode.c +++ b/dlls/crypt32/encode.c @@ -564,13 +564,12 @@ static BOOL WINAPI CRYPT_AsnEncodeCRLEntries(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded) { - DWORD cCRLEntry = *(const DWORD *)pvStructInfo; DWORD bytesNeeded, dataLen, lenBytes, i; - const CRL_ENTRY *rgCRLEntry = *(const CRL_ENTRY *const *) - ((const BYTE *)pvStructInfo + sizeof(DWORD)); + const CRL_INFO *info = pvStructInfo; + const CRL_ENTRY *rgCRLEntry = info->rgCRLEntry; BOOL ret = TRUE;
- for (i = 0, dataLen = 0; ret && i < cCRLEntry; i++) + for (i = 0, dataLen = 0; ret && i < info->cCRLEntry; i++) { DWORD size;
@@ -594,7 +593,7 @@ static BOOL WINAPI CRYPT_AsnEncodeCRLEntries(DWORD dwCertEncodingType, *pbEncoded++ = ASN_SEQUENCEOF; CRYPT_EncodeLen(dataLen, pbEncoded, &lenBytes); pbEncoded += lenBytes; - for (i = 0; i < cCRLEntry; i++) + for (i = 0; i < info->cCRLEntry; i++) { DWORD size = dataLen;
@@ -659,7 +658,7 @@ static BOOL WINAPI CRYPT_AsnEncodeCRLInfo(DWORD dwCertEncodingType, } if (info->cCRLEntry) { - items[cItem].pvStructInfo = &info->cCRLEntry; + items[cItem].pvStructInfo = info; items[cItem].encodeFunc = CRYPT_AsnEncodeCRLEntries; cItem++; }