Module: wine Branch: master Commit: ad94982284f4d7db57c4c1c4f66b80be01f9b3ce URL: http://source.winehq.org/git/wine.git/?a=commit;h=ad94982284f4d7db57c4c1c4f6...
Author: Juan Lang juan.lang@gmail.com Date: Mon Sep 17 17:08:24 2007 -0700
crypt32: Implement DecodeAltName with DecodeAltNameInternal.
---
dlls/crypt32/decode.c | 28 +++++++++++++++++++++++----- 1 files changed, 23 insertions(+), 5 deletions(-)
diff --git a/dlls/crypt32/decode.c b/dlls/crypt32/decode.c index 120d890..e96757f 100644 --- a/dlls/crypt32/decode.c +++ b/dlls/crypt32/decode.c @@ -2622,12 +2622,30 @@ static BOOL WINAPI CRYPT_AsnDecodeAltName(DWORD dwCertEncodingType,
__TRY { - struct AsnArrayDescriptor arrayDesc = { ASN_SEQUENCEOF, - CRYPT_AsnDecodeAltNameEntry, sizeof(CERT_ALT_NAME_ENTRY), TRUE, - offsetof(CERT_ALT_NAME_ENTRY, u.pwszURL) }; + DWORD bytesNeeded;
- ret = CRYPT_AsnDecodeArray(&arrayDesc, pbEncoded, cbEncoded, dwFlags, - pDecodePara, pvStructInfo, pcbStructInfo, NULL, NULL); + if ((ret = CRYPT_AsnDecodeAltNameInternal(dwCertEncodingType, + lpszStructType, pbEncoded, cbEncoded, + dwFlags & ~CRYPT_DECODE_ALLOC_FLAG, NULL, NULL, &bytesNeeded))) + { + if (!pvStructInfo) + *pcbStructInfo = bytesNeeded; + else if ((ret = CRYPT_DecodeEnsureSpace(dwFlags, pDecodePara, + pvStructInfo, pcbStructInfo, bytesNeeded))) + { + CERT_ALT_NAME_INFO *name; + + if (dwFlags & CRYPT_DECODE_ALLOC_FLAG) + pvStructInfo = *(BYTE **)pvStructInfo; + name = (CERT_ALT_NAME_INFO *)pvStructInfo; + name->rgAltEntry = (PCERT_ALT_NAME_ENTRY) + ((BYTE *)pvStructInfo + sizeof(CERT_ALT_NAME_INFO)); + ret = CRYPT_AsnDecodeAltNameInternal(dwCertEncodingType, + lpszStructType, pbEncoded, cbEncoded, + dwFlags & ~CRYPT_DECODE_ALLOC_FLAG, NULL, pvStructInfo, + &bytesNeeded); + } + } } __EXCEPT_PAGE_FAULT {