From 74cca3c98f913ff9b17bb85669f29e60fd53268f Mon Sep 17 00:00:00 2001 From: Juan Lang Date: Mon, 17 Sep 2007 17:08:24 -0700 Subject: [PATCH] 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_AsnDecodeAltNam __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 { -- 1.4.1