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