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