Juan Lang : crypt32: Let decoder helpers do more sanity checking.
Alexandre Julliard
julliard at winehq.org
Thu Oct 15 08:54:31 CDT 2009
Module: wine
Branch: master
Commit: 6ef1c3e09f8f4e1b62cc1bdded8030928443241b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6ef1c3e09f8f4e1b62cc1bdded8030928443241b
Author: Juan Lang <juan.lang at gmail.com>
Date: Wed Oct 14 12:46:16 2009 -0700
crypt32: Let decoder helpers do more sanity checking.
---
dlls/crypt32/decode.c | 26 +++++++++++++++-----------
1 files changed, 15 insertions(+), 11 deletions(-)
diff --git a/dlls/crypt32/decode.c b/dlls/crypt32/decode.c
index c99a32e..922b8c1 100644
--- a/dlls/crypt32/decode.c
+++ b/dlls/crypt32/decode.c
@@ -604,7 +604,12 @@ static BOOL CRYPT_AsnDecodeArray(const struct AsnArrayDescriptor *arrayDesc,
cbEncoded, dwFlags, pDecodePara, pvStructInfo, *pcbStructInfo,
startingPointer);
- if (!arrayDesc->tag || pbEncoded[0] == arrayDesc->tag)
+ if (!cbEncoded)
+ {
+ SetLastError(CRYPT_E_ASN1_EOD);
+ ret = FALSE;
+ }
+ else if (!arrayDesc->tag || pbEncoded[0] == arrayDesc->tag)
{
DWORD dataLen;
@@ -765,7 +770,12 @@ static BOOL CRYPT_AsnDecodeArrayNoAlloc(const struct AsnArrayDescriptor *arrayDe
TRACE("%p, %p, %d, %p, %p, %d\n", arrayDesc, pbEncoded,
cbEncoded, pcItems, rgItems, pcItems ? *pcbItems : 0);
- if (!arrayDesc->tag || pbEncoded[0] == arrayDesc->tag)
+ if (!cbEncoded)
+ {
+ SetLastError(CRYPT_E_ASN1_EOD);
+ ret = FALSE;
+ }
+ else if (!arrayDesc->tag || pbEncoded[0] == arrayDesc->tag)
{
DWORD dataLen;
@@ -2494,7 +2504,7 @@ static BOOL CRYPT_AsnDecodeSMIMECapabilitiesInternal(const BYTE *pbEncoded,
DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo,
DWORD *pcbDecoded)
{
- struct AsnArrayDescriptor arrayDesc = { 0,
+ struct AsnArrayDescriptor arrayDesc = { ASN_SEQUENCEOF,
CRYPT_AsnDecodeSMIMECapability, sizeof(CRYPT_SMIME_CAPABILITY), TRUE,
offsetof(CRYPT_SMIME_CAPABILITY, pszObjId) };
PCRYPT_SMIME_CAPABILITIES capabilities = pvStructInfo;
@@ -2519,11 +2529,7 @@ static BOOL WINAPI CRYPT_AsnDecodeSMIMECapabilities(DWORD dwCertEncodingType,
{
DWORD bytesNeeded;
- if (!cbEncoded)
- SetLastError(CRYPT_E_ASN1_EOD);
- else if (pbEncoded[0] != ASN_SEQUENCEOF)
- SetLastError(CRYPT_E_ASN1_CORRUPT);
- else if ((ret = CRYPT_AsnDecodeSMIMECapabilitiesInternal(pbEncoded,
+ if ((ret = CRYPT_AsnDecodeSMIMECapabilitiesInternal(pbEncoded,
cbEncoded, dwFlags & ~CRYPT_DECODE_ALLOC_FLAG, NULL, &bytesNeeded,
NULL)))
{
@@ -2989,9 +2995,7 @@ static BOOL WINAPI CRYPT_AsnDecodePKCSAttributes(DWORD dwCertEncodingType,
{
DWORD bytesNeeded;
- if (!cbEncoded)
- SetLastError(CRYPT_E_ASN1_EOD);
- else if (pbEncoded[0] != (ASN_CONSTRUCTOR | ASN_SETOF))
+ if (pbEncoded[0] != (ASN_CONSTRUCTOR | ASN_SETOF))
SetLastError(CRYPT_E_ASN1_CORRUPT);
else if ((ret = CRYPT_AsnDecodePKCSAttributesInternal(pbEncoded,
cbEncoded, dwFlags & ~CRYPT_DECODE_ALLOC_FLAG, NULL, &bytesNeeded,
More information about the wine-cvs
mailing list