Juan Lang : crypt32: Remove exception handling from internal decoding functions.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Jun 2 04:55:59 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: a7f6a0128c141eb2c4970be531160e6b8acdcb47
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=a7f6a0128c141eb2c4970be531160e6b8acdcb47

Author: Juan Lang <juan_lang at yahoo.com>
Date:   Thu Jun  1 21:23:26 2006 -0700

crypt32: Remove exception handling from internal decoding functions.

---

 dlls/crypt32/decode.c |  176 ++++++++++++++++++++-----------------------------
 1 files changed, 73 insertions(+), 103 deletions(-)

diff --git a/dlls/crypt32/decode.c b/dlls/crypt32/decode.c
index e6e2423..d2be521 100644
--- a/dlls/crypt32/decode.c
+++ b/dlls/crypt32/decode.c
@@ -1187,98 +1187,88 @@ static BOOL WINAPI CRYPT_AsnDecodeNameVa
  PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
 {
     BOOL ret = TRUE;
+    DWORD dataLen;
+    CERT_NAME_VALUE *value = (CERT_NAME_VALUE *)pvStructInfo;
 
-    __TRY
+    if ((ret = CRYPT_GetLen(pbEncoded, cbEncoded, &dataLen)))
     {
-        DWORD dataLen;
-        CERT_NAME_VALUE *value = (CERT_NAME_VALUE *)pvStructInfo;
+        BYTE lenBytes = GET_LEN_BYTES(pbEncoded[1]);
 
-        if ((ret = CRYPT_GetLen(pbEncoded, cbEncoded, &dataLen)))
+        switch (pbEncoded[0])
         {
-            BYTE lenBytes = GET_LEN_BYTES(pbEncoded[1]);
+        case ASN_NUMERICSTRING:
+        case ASN_PRINTABLESTRING:
+        case ASN_IA5STRING:
+            break;
+        default:
+            FIXME("Unimplemented string type %02x\n", pbEncoded[0]);
+            SetLastError(OSS_UNIMPLEMENTED);
+            ret = FALSE;
+        }
+        if (ret)
+        {
+            DWORD bytesNeeded = sizeof(CERT_NAME_VALUE);
 
             switch (pbEncoded[0])
             {
             case ASN_NUMERICSTRING:
             case ASN_PRINTABLESTRING:
             case ASN_IA5STRING:
+                if (!(dwFlags & CRYPT_DECODE_NOCOPY_FLAG))
+                    bytesNeeded += dataLen;
                 break;
-            default:
-                FIXME("Unimplemented string type %02x\n", pbEncoded[0]);
-                SetLastError(OSS_UNIMPLEMENTED);
+            }
+            if (!value)
+                *pcbStructInfo = bytesNeeded;
+            else if (*pcbStructInfo < bytesNeeded)
+            {
+                *pcbStructInfo = bytesNeeded;
+                SetLastError(ERROR_MORE_DATA);
                 ret = FALSE;
             }
-            if (ret)
+            else
             {
-                DWORD bytesNeeded = sizeof(CERT_NAME_VALUE);
-
+                *pcbStructInfo = bytesNeeded;
                 switch (pbEncoded[0])
                 {
                 case ASN_NUMERICSTRING:
+                    value->dwValueType = CERT_RDN_NUMERIC_STRING;
+                    break;
                 case ASN_PRINTABLESTRING:
+                    value->dwValueType = CERT_RDN_PRINTABLE_STRING;
+                    break;
                 case ASN_IA5STRING:
-                    if (!(dwFlags & CRYPT_DECODE_NOCOPY_FLAG))
-                        bytesNeeded += dataLen;
+                    value->dwValueType = CERT_RDN_IA5_STRING;
                     break;
                 }
-                if (!value)
-                    *pcbStructInfo = bytesNeeded;
-                else if (*pcbStructInfo < bytesNeeded)
-                {
-                    *pcbStructInfo = bytesNeeded;
-                    SetLastError(ERROR_MORE_DATA);
-                    ret = FALSE;
-                }
-                else
+                if (dataLen)
                 {
-                    *pcbStructInfo = bytesNeeded;
                     switch (pbEncoded[0])
                     {
                     case ASN_NUMERICSTRING:
-                        value->dwValueType = CERT_RDN_NUMERIC_STRING;
-                        break;
                     case ASN_PRINTABLESTRING:
-                        value->dwValueType = CERT_RDN_PRINTABLE_STRING;
-                        break;
                     case ASN_IA5STRING:
-                        value->dwValueType = CERT_RDN_IA5_STRING;
-                        break;
-                    }
-                    if (dataLen)
-                    {
-                        switch (pbEncoded[0])
+                        value->Value.cbData = dataLen;
+                        if (dwFlags & CRYPT_DECODE_NOCOPY_FLAG)
+                            value->Value.pbData = (BYTE *)pbEncoded + 1 +
+                             lenBytes;
+                        else
                         {
-                        case ASN_NUMERICSTRING:
-                        case ASN_PRINTABLESTRING:
-                        case ASN_IA5STRING:
-                            value->Value.cbData = dataLen;
-                            if (dwFlags & CRYPT_DECODE_NOCOPY_FLAG)
-                                value->Value.pbData = (BYTE *)pbEncoded + 1 +
-                                 lenBytes;
-                            else
-                            {
-                                assert(value->Value.pbData);
-                                memcpy(value->Value.pbData,
-                                 pbEncoded + 1 + lenBytes, dataLen);
-                            }
-                            break;
+                            assert(value->Value.pbData);
+                            memcpy(value->Value.pbData,
+                             pbEncoded + 1 + lenBytes, dataLen);
                         }
+                        break;
                     }
-                    else
-                    {
-                        value->Value.cbData = 0;
-                        value->Value.pbData = NULL;
-                    }
+                }
+                else
+                {
+                    value->Value.cbData = 0;
+                    value->Value.pbData = NULL;
                 }
             }
         }
     }
-    __EXCEPT_PAGE_FAULT
-    {
-        SetLastError(STATUS_ACCESS_VIOLATION);
-        ret = FALSE;
-    }
-    __ENDTRY
     return ret;
 }
 
@@ -1287,41 +1277,31 @@ static BOOL WINAPI CRYPT_AsnDecodeRdnAtt
  PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
 {
     BOOL ret;
+    struct AsnDecodeSequenceItem items[] = {
+     { ASN_OBJECTIDENTIFIER, offsetof(CERT_RDN_ATTR, pszObjId),
+       CRYPT_AsnDecodeOidInternal, sizeof(LPSTR), FALSE, TRUE,
+       offsetof(CERT_RDN_ATTR, pszObjId), 0 },
+     { 0, offsetof(CERT_RDN_ATTR, dwValueType),
+       CRYPT_AsnDecodeNameValue, sizeof(CERT_NAME_VALUE),
+       FALSE, TRUE, offsetof(CERT_RDN_ATTR, Value.pbData), 0 },
+    };
+    CERT_RDN_ATTR *attr = (CERT_RDN_ATTR *)pvStructInfo;
 
     TRACE("%p, %ld, %08lx, %p, %ld\n", pbEncoded, cbEncoded, dwFlags,
      pvStructInfo, *pcbStructInfo);
 
-    __TRY
-    {
-        struct AsnDecodeSequenceItem items[] = {
-         { ASN_OBJECTIDENTIFIER, offsetof(CERT_RDN_ATTR, pszObjId),
-           CRYPT_AsnDecodeOidInternal, sizeof(LPSTR), FALSE, TRUE,
-           offsetof(CERT_RDN_ATTR, pszObjId), 0 },
-         { 0, offsetof(CERT_RDN_ATTR, dwValueType), CRYPT_AsnDecodeNameValue,
-           sizeof(CERT_NAME_VALUE), FALSE, TRUE, offsetof(CERT_RDN_ATTR,
-           Value.pbData), 0 },
-        };
-        CERT_RDN_ATTR *attr = (CERT_RDN_ATTR *)pvStructInfo;
-
-        if (attr)
-            TRACE("attr->pszObjId is %p\n", attr->pszObjId);
-        ret = CRYPT_AsnDecodeSequence(X509_ASN_ENCODING, items,
-         sizeof(items) / sizeof(items[0]), pbEncoded, cbEncoded, dwFlags, NULL,
-         attr, pcbStructInfo, attr ? attr->pszObjId : NULL);
-        if (attr)
-        {
-            TRACE("attr->pszObjId is %p (%s)\n", attr->pszObjId,
-             debugstr_a(attr->pszObjId));
-            TRACE("attr->dwValueType is %ld\n", attr->dwValueType);
-        }
-        TRACE("returning %d (%08lx)\n", ret, GetLastError());
-    }
-    __EXCEPT_PAGE_FAULT
+    if (attr)
+        TRACE("attr->pszObjId is %p\n", attr->pszObjId);
+    ret = CRYPT_AsnDecodeSequence(X509_ASN_ENCODING, items,
+     sizeof(items) / sizeof(items[0]), pbEncoded, cbEncoded, dwFlags, NULL,
+     attr, pcbStructInfo, attr ? attr->pszObjId : NULL);
+    if (attr)
     {
-        SetLastError(STATUS_ACCESS_VIOLATION);
-        ret = FALSE;
+        TRACE("attr->pszObjId is %p (%s)\n", attr->pszObjId,
+         debugstr_a(attr->pszObjId));
+        TRACE("attr->dwValueType is %ld\n", attr->dwValueType);
     }
-    __ENDTRY
+    TRACE("returning %d (%08lx)\n", ret, GetLastError());
     return ret;
 }
 
@@ -1330,23 +1310,13 @@ static BOOL WINAPI CRYPT_AsnDecodeRdn(DW
  PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
 {
     BOOL ret = TRUE;
+    struct AsnArrayDescriptor arrayDesc = { ASN_CONSTRUCTOR | ASN_SETOF,
+     CRYPT_AsnDecodeRdnAttr, sizeof(CERT_RDN_ATTR), TRUE,
+     offsetof(CERT_RDN_ATTR, pszObjId) };
+    PCERT_RDN rdn = (PCERT_RDN)pvStructInfo;
 
-    __TRY
-    {
-        struct AsnArrayDescriptor arrayDesc = { ASN_CONSTRUCTOR | ASN_SETOF,
-         CRYPT_AsnDecodeRdnAttr, sizeof(CERT_RDN_ATTR), TRUE,
-         offsetof(CERT_RDN_ATTR, pszObjId) };
-        PCERT_RDN rdn = (PCERT_RDN)pvStructInfo;
-
-        ret = CRYPT_AsnDecodeArray(&arrayDesc, pbEncoded, cbEncoded, dwFlags,
-         pDecodePara, pvStructInfo, pcbStructInfo, rdn ? rdn->rgRDNAttr : NULL);
-    }
-    __EXCEPT_PAGE_FAULT
-    {
-        SetLastError(STATUS_ACCESS_VIOLATION);
-        ret = FALSE;
-    }
-    __ENDTRY
+    ret = CRYPT_AsnDecodeArray(&arrayDesc, pbEncoded, cbEncoded, dwFlags,
+     pDecodePara, pvStructInfo, pcbStructInfo, rdn ? rdn->rgRDNAttr : NULL);
     return ret;
 }
 




More information about the wine-cvs mailing list