From 136eedb9af789b5732080a744caa1b8b79afb81b Mon Sep 17 00:00:00 2001 From: Juan Lang Date: Wed, 14 Oct 2009 13:01:48 -0700 Subject: [PATCH] crypt32: Further simplify calling CRYPT_AsnDecodeArrayNoAlloc. --- dlls/crypt32/decode.c | 293 ++++-------------------------------------- 1 file changed, 22 insertions(+), 271 deletions(-) diff --git a/dlls/crypt32/decode.c b/dlls/crypt32/decode.c index b7c71dff8f6..4332cfbd56e 100644 --- a/dlls/crypt32/decode.c +++ b/dlls/crypt32/decode.c @@ -1102,28 +1102,12 @@ static BOOL CRYPT_AsnDecodeCertExtensionsInternal(const BYTE *pbEncoded, FINALMEMBERSIZE(CERT_INFO, cExtension), CRYPT_AsnDecodeExtension, sizeof(CERT_EXTENSION), TRUE, offsetof(CERT_EXTENSION, pszObjId) }; - DWORD bytesNeeded; TRACE("%p, %d, %08x, %p, %d, %p\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, *pcbStructInfo, pcbDecoded); ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded, - NULL, &bytesNeeded, pcbDecoded); - if (ret) - { - if (!pvStructInfo) - *pcbStructInfo = bytesNeeded; - else if ((ret = CRYPT_DecodeEnsureSpace(dwFlags, NULL, pvStructInfo, - pcbStructInfo, bytesNeeded))) - { - CERT_INFO *info; - - info = (CERT_INFO *)((BYTE *)pvStructInfo - - offsetof(CERT_INFO, cExtension)); - ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, - cbEncoded, &info->cExtension, &bytesNeeded, pcbDecoded); - } - } + pvStructInfo, pcbStructInfo, pcbDecoded); return ret; } @@ -1273,28 +1257,12 @@ static BOOL CRYPT_AsnDecodeCRLEntryExtensions(const BYTE *pbEncoded, FINALMEMBERSIZE(CRL_ENTRY, cExtension), CRYPT_AsnDecodeExtension, sizeof(CERT_EXTENSION), TRUE, offsetof(CERT_EXTENSION, pszObjId) }; - DWORD bytesNeeded; TRACE("%p, %d, %08x, %p, %d, %p\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, *pcbStructInfo, pcbDecoded); ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded, - NULL, &bytesNeeded, pcbDecoded); - if (ret) - { - if (!pvStructInfo) - *pcbStructInfo = bytesNeeded; - else if ((ret = CRYPT_DecodeEnsureSpace(dwFlags, NULL, pvStructInfo, - pcbStructInfo, bytesNeeded))) - { - CRL_ENTRY *entry; - - entry = (CRL_ENTRY *)((BYTE *)pvStructInfo - - offsetof(CRL_ENTRY, cExtension)); - ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, - cbEncoded, &entry->cExtension, &bytesNeeded, pcbDecoded); - } - } + pvStructInfo, pcbStructInfo, pcbDecoded); return ret; } @@ -1342,28 +1310,12 @@ static BOOL CRYPT_AsnDecodeCRLEntries(const BYTE *pbEncoded, DWORD cbEncoded, MEMBERSIZE(CRL_INFO, cCRLEntry, cExtension), CRYPT_AsnDecodeCRLEntry, sizeof(CRL_ENTRY), TRUE, offsetof(CRL_ENTRY, SerialNumber.pbData) }; - DWORD bytesNeeded; TRACE("%p, %d, %08x, %p, %d, %p\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, *pcbStructInfo, pcbDecoded); ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded, - NULL, &bytesNeeded, pcbDecoded); - if (ret) - { - if (!pvStructInfo) - *pcbStructInfo = bytesNeeded; - else if ((ret = CRYPT_DecodeEnsureSpace(dwFlags, NULL, pvStructInfo, - pcbStructInfo, bytesNeeded))) - { - CRL_INFO *info; - - info = (CRL_INFO *)((BYTE *)pvStructInfo - - offsetof(CRL_INFO, cCRLEntry)); - ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, - cbEncoded, &info->cCRLEntry, &bytesNeeded, pcbDecoded); - } - } + pvStructInfo, pcbStructInfo, pcbDecoded); TRACE("Returning %d (%08x)\n", ret, GetLastError()); return ret; } @@ -1378,28 +1330,12 @@ static BOOL CRYPT_AsnDecodeCRLExtensionsInternal(const BYTE *pbEncoded, FINALMEMBERSIZE(CRL_INFO, cExtension), CRYPT_AsnDecodeExtension, sizeof(CERT_EXTENSION), TRUE, offsetof(CERT_EXTENSION, pszObjId) }; - DWORD bytesNeeded; TRACE("%p, %d, %08x, %p, %d, %p\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, *pcbStructInfo, pcbDecoded); ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded, - NULL, &bytesNeeded, pcbDecoded); - if (ret) - { - if (!pvStructInfo) - *pcbStructInfo = bytesNeeded; - else if ((ret = CRYPT_DecodeEnsureSpace(dwFlags, NULL, pvStructInfo, - pcbStructInfo, bytesNeeded))) - { - CRL_INFO *info; - - info = (CRL_INFO *)((BYTE *)pvStructInfo - - offsetof(CRL_INFO, cExtension)); - ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, - cbEncoded, &info->cExtension, &bytesNeeded, pcbDecoded); - } - } + pvStructInfo, pcbStructInfo, pcbDecoded); return ret; } @@ -2364,26 +2300,10 @@ static BOOL CRYPT_AsnDecodeCTLEntryAttributes(const BYTE *pbEncoded, FINALMEMBERSIZE(CTL_ENTRY, cAttribute), CRYPT_AsnDecodePKCSAttributeInternal, sizeof(CRYPT_ATTRIBUTE), TRUE, offsetof(CRYPT_ATTRIBUTE, pszObjId) }; - DWORD bytesNeeded; BOOL ret; ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded, - NULL, &bytesNeeded, pcbDecoded); - if (ret) - { - if (!pvStructInfo) - *pcbStructInfo = bytesNeeded; - else if ((ret = CRYPT_DecodeEnsureSpace(dwFlags, NULL, pvStructInfo, - pcbStructInfo, bytesNeeded))) - { - CTL_ENTRY *entry; - - entry = (CTL_ENTRY *)((BYTE *)pvStructInfo - - offsetof(CTL_ENTRY, cAttribute)); - ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, - cbEncoded, &entry->cAttribute, &bytesNeeded, pcbDecoded); - } - } + pvStructInfo, pcbStructInfo, pcbDecoded); return ret; } @@ -2420,28 +2340,12 @@ static BOOL CRYPT_AsnDecodeCTLEntries(const BYTE *pbEncoded, DWORD cbEncoded, FINALMEMBERSIZE(CTL_INFO, cExtension), CRYPT_AsnDecodeCTLEntry, sizeof(CTL_ENTRY), TRUE, offsetof(CTL_ENTRY, SubjectIdentifier.pbData) }; - DWORD bytesNeeded; TRACE("%p, %d, %08x, %p, %d, %p\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, *pcbStructInfo, pcbDecoded); ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded, - NULL, &bytesNeeded, pcbDecoded); - if (ret) - { - if (!pvStructInfo) - *pcbStructInfo = bytesNeeded; - else if ((ret = CRYPT_DecodeEnsureSpace(dwFlags, NULL, pvStructInfo, - pcbStructInfo, bytesNeeded))) - { - CTL_INFO *info; - - info = (CTL_INFO *)((BYTE *)pvStructInfo - - offsetof(CTL_INFO, cCTLEntry)); - ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, - cbEncoded, &info->cCTLEntry, &bytesNeeded, pcbDecoded); - } - } + pvStructInfo, pcbStructInfo, pcbDecoded); return ret; } @@ -2455,28 +2359,12 @@ static BOOL CRYPT_AsnDecodeCTLExtensionsInternal(const BYTE *pbEncoded, FINALMEMBERSIZE(CTL_INFO, cExtension), CRYPT_AsnDecodeExtension, sizeof(CERT_EXTENSION), TRUE, offsetof(CERT_EXTENSION, pszObjId) }; - DWORD bytesNeeded; TRACE("%p, %d, %08x, %p, %d, %p\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, *pcbStructInfo, pcbDecoded); ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded, - NULL, &bytesNeeded, pcbDecoded); - if (ret) - { - if (!pvStructInfo) - *pcbStructInfo = bytesNeeded; - else if ((ret = CRYPT_DecodeEnsureSpace(dwFlags, NULL, pvStructInfo, - pcbStructInfo, bytesNeeded))) - { - CTL_INFO *info; - - info = (CTL_INFO *)((BYTE *)pvStructInfo - - offsetof(CTL_INFO, cExtension)); - ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, - cbEncoded, &info->cExtension, &bytesNeeded, pcbDecoded); - } - } + pvStructInfo, pcbStructInfo, pcbDecoded); return ret; } @@ -2686,30 +2574,13 @@ static BOOL CRYPT_AsnDecodeNoticeNumbers(const BYTE *pbEncoded, offsetof(CERT_POLICY_QUALIFIER_NOTICE_REFERENCE, rgNoticeNumbers), FINALMEMBERSIZE(CERT_POLICY_QUALIFIER_NOTICE_REFERENCE, cNoticeNumbers), CRYPT_AsnDecodeIntInternal, sizeof(int), FALSE, 0 }; - DWORD bytesNeeded; BOOL ret; TRACE("(%p, %d, %08x, %p, %d)\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, pvStructInfo ? *pcbDecoded : 0); ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded, - NULL, &bytesNeeded, pcbDecoded); - if (ret) - { - if (!pvStructInfo) - *pcbStructInfo = bytesNeeded; - else if ((ret = CRYPT_DecodeEnsureSpace(dwFlags, NULL, pvStructInfo, - pcbStructInfo, bytesNeeded))) - { - CERT_POLICY_QUALIFIER_NOTICE_REFERENCE *ref; - - ref = (CERT_POLICY_QUALIFIER_NOTICE_REFERENCE *) - ((BYTE *)pvStructInfo - - offsetof(CERT_POLICY_QUALIFIER_NOTICE_REFERENCE, cNoticeNumbers)); - ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, - cbEncoded, &ref->cNoticeNumbers, &bytesNeeded, pcbDecoded); - } - } + pvStructInfo, pcbStructInfo, pcbDecoded); TRACE("returning %d\n", ret); return ret; } @@ -2992,26 +2863,12 @@ static BOOL CRYPT_AsnDecodePKCSAttributeValue(const BYTE *pbEncoded, FINALMEMBERSIZE(CRYPT_ATTRIBUTE, cValue), CRYPT_AsnDecodeCopyBytes, sizeof(CRYPT_DER_BLOB), TRUE, offsetof(CRYPT_DER_BLOB, pbData) }; - DWORD bytesNeeded; TRACE("%p, %d, %08x, %p, %d, %p\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, pvStructInfo ? *pcbStructInfo : 0, pcbDecoded); - if ((ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded, - NULL, &bytesNeeded, pcbDecoded))) - { - if (!pvStructInfo) - *pcbStructInfo = bytesNeeded; - else if ((ret = CRYPT_DecodeEnsureSpace(0, NULL, pvStructInfo, - pcbStructInfo, bytesNeeded))) - { - CRYPT_ATTRIBUTE *attr = (CRYPT_ATTRIBUTE *)((BYTE *)pvStructInfo - - offsetof(CRYPT_ATTRIBUTE, cValue)); - - ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded, - &attr->cValue, pcbStructInfo, pcbDecoded); - } - } + ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded, + pvStructInfo, pcbStructInfo, pcbDecoded); return ret; } @@ -3826,30 +3683,12 @@ static BOOL CRYPT_AsnDecodeSubtreeConstraints(const BYTE *pbEncoded, FINALMEMBERSIZE(CERT_BASIC_CONSTRAINTS_INFO, cSubtreesConstraint), CRYPT_AsnDecodeCopyBytes, sizeof(CERT_NAME_BLOB), TRUE, offsetof(CERT_NAME_BLOB, pbData) }; - DWORD bytesNeeded; TRACE("%p, %d, %08x, %p, %d, %p\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, *pcbStructInfo, pcbDecoded); ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded, - NULL, &bytesNeeded, pcbDecoded); - if (ret) - { - if (!pvStructInfo) - *pcbStructInfo = bytesNeeded; - else if ((ret = CRYPT_DecodeEnsureSpace(dwFlags, NULL, pvStructInfo, - pcbStructInfo, bytesNeeded))) - { - CERT_BASIC_CONSTRAINTS_INFO *constraint; - - constraint = (CERT_BASIC_CONSTRAINTS_INFO *) - ((BYTE *)pvStructInfo - - offsetof(CERT_BASIC_CONSTRAINTS_INFO, cSubtreesConstraint)); - ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, - cbEncoded, &constraint->cSubtreesConstraint, &bytesNeeded, - pcbDecoded); - } - } + pvStructInfo, pcbStructInfo, pcbDecoded); TRACE("Returning %d (%08x)\n", ret, GetLastError()); return ret; } @@ -3954,28 +3793,12 @@ static BOOL CRYPT_AsnDecodePolicyQualifiers(const BYTE *pbEncoded, FINALMEMBERSIZE(CERT_POLICY_INFO, cPolicyQualifier), CRYPT_AsnDecodePolicyQualifier, sizeof(CERT_POLICY_QUALIFIER_INFO), TRUE, offsetof(CERT_POLICY_QUALIFIER_INFO, pszPolicyQualifierId) }; - DWORD bytesNeeded; TRACE("%p, %d, %08x, %p, %d\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, pvStructInfo ? *pcbStructInfo : 0); ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded, - NULL, &bytesNeeded, pcbDecoded); - if (ret) - { - if (!pvStructInfo) - *pcbStructInfo = bytesNeeded; - else if ((ret = CRYPT_DecodeEnsureSpace(dwFlags, NULL, pvStructInfo, - pcbStructInfo, bytesNeeded))) - { - CERT_POLICY_INFO *info; - - info = (CERT_POLICY_INFO *)((BYTE *)pvStructInfo - - offsetof(CERT_POLICY_INFO, cPolicyQualifier)); - ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded, - &info->cPolicyQualifier, &bytesNeeded, pcbDecoded); - } - } + pvStructInfo, pcbStructInfo, pcbDecoded); TRACE("Returning %d (%08x)\n", ret, GetLastError()); return ret; } @@ -5345,27 +5168,12 @@ static BOOL CRYPT_AsnDecodePermittedSubtree(const BYTE *pbEncoded, cExcludedSubtree), CRYPT_AsnDecodeSubtree, sizeof(CERT_GENERAL_SUBTREE), TRUE, offsetof(CERT_GENERAL_SUBTREE, Base.u.pwszURL) }; - DWORD bytesNeeded; TRACE("%p, %d, %08x, %p, %d, %p\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, *pcbStructInfo, pcbDecoded); - if ((ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded, - NULL, &bytesNeeded, pcbDecoded))) - { - if (!pvStructInfo) - *pcbStructInfo = bytesNeeded; - else if ((ret = CRYPT_DecodeEnsureSpace(0, NULL, pvStructInfo, - pcbStructInfo, bytesNeeded))) - { - CERT_NAME_CONSTRAINTS_INFO *info = (CERT_NAME_CONSTRAINTS_INFO *) - ((BYTE *)pvStructInfo - - offsetof(CERT_NAME_CONSTRAINTS_INFO, cPermittedSubtree)); - - ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded, - &info->cPermittedSubtree, &bytesNeeded, pcbDecoded); - } - } + ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded, + pvStructInfo, pcbStructInfo, pcbDecoded); return ret; } @@ -5380,27 +5188,12 @@ static BOOL CRYPT_AsnDecodeExcludedSubtree(const BYTE *pbEncoded, FINALMEMBERSIZE(CERT_NAME_CONSTRAINTS_INFO, cExcludedSubtree), CRYPT_AsnDecodeSubtree, sizeof(CERT_GENERAL_SUBTREE), TRUE, offsetof(CERT_GENERAL_SUBTREE, Base.u.pwszURL) }; - DWORD bytesNeeded; TRACE("%p, %d, %08x, %p, %d, %p\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, *pcbStructInfo, pcbDecoded); - if ((ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded, - NULL, &bytesNeeded, pcbDecoded))) - { - if (!pvStructInfo) - *pcbStructInfo = bytesNeeded; - else if ((ret = CRYPT_DecodeEnsureSpace(0, NULL, pvStructInfo, - pcbStructInfo, bytesNeeded))) - { - CERT_NAME_CONSTRAINTS_INFO *info = (CERT_NAME_CONSTRAINTS_INFO *) - ((BYTE *)pvStructInfo - - offsetof(CERT_NAME_CONSTRAINTS_INFO, cExcludedSubtree)); - - ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded, - &info->cExcludedSubtree, &bytesNeeded, pcbDecoded); - } - } + ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded, + pvStructInfo, pcbStructInfo, pcbDecoded); return ret; } @@ -5565,26 +5358,12 @@ static BOOL CRYPT_AsnDecodeCMSCertEncoded(const BYTE *pbEncoded, MEMBERSIZE(CRYPT_SIGNED_INFO, cCertEncoded, cCrlEncoded), CRYPT_AsnDecodeCopyBytes, sizeof(CRYPT_DER_BLOB), TRUE, offsetof(CRYPT_DER_BLOB, pbData) }; - DWORD bytesNeeded; TRACE("%p, %d, %08x, %p, %d, %p\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, pvStructInfo ? *pcbStructInfo : 0, pcbDecoded); - if ((ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded, - NULL, &bytesNeeded, pcbDecoded))) - { - if (!pvStructInfo) - *pcbStructInfo = bytesNeeded; - else if ((ret = CRYPT_DecodeEnsureSpace(0, NULL, pvStructInfo, - pcbStructInfo, bytesNeeded))) - { - CRYPT_SIGNED_INFO *info = (CRYPT_SIGNED_INFO *) - ((BYTE *)pvStructInfo - offsetof(CRYPT_SIGNED_INFO, cCertEncoded)); - - ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded, - &info->cCertEncoded, &bytesNeeded, pcbDecoded); - } - } + ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded, + pvStructInfo, pcbStructInfo, pcbDecoded); return ret; } @@ -5599,26 +5378,12 @@ static BOOL CRYPT_AsnDecodeCMSCrlEncoded(const BYTE *pbEncoded, MEMBERSIZE(CRYPT_SIGNED_INFO, cCrlEncoded, content), CRYPT_AsnDecodeCopyBytes, sizeof(CRYPT_DER_BLOB), TRUE, offsetof(CRYPT_DER_BLOB, pbData) }; - DWORD bytesNeeded; TRACE("%p, %d, %08x, %p, %d, %p\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, pvStructInfo ? *pcbStructInfo : 0, pcbDecoded); - if ((ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded, - NULL, &bytesNeeded, pcbDecoded))) - { - if (!pvStructInfo) - *pcbStructInfo = bytesNeeded; - else if ((ret = CRYPT_DecodeEnsureSpace(0, NULL, pvStructInfo, - pcbStructInfo, bytesNeeded))) - { - CRYPT_SIGNED_INFO *info = (CRYPT_SIGNED_INFO *) - ((BYTE *)pvStructInfo - offsetof(CRYPT_SIGNED_INFO, cCrlEncoded)); - - ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded, - &info->cCrlEncoded, &bytesNeeded, pcbDecoded); - } - } + ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded, + pvStructInfo, pcbStructInfo, pcbDecoded); return ret; } @@ -5756,26 +5521,12 @@ static BOOL CRYPT_DecodeSignerArray(const BYTE *pbEncoded, DWORD cbEncoded, FINALMEMBERSIZE(CRYPT_SIGNED_INFO, cSignerInfo), CRYPT_AsnDecodeCMSSignerInfoInternal, sizeof(CMSG_CMS_SIGNER_INFO), TRUE, offsetof(CMSG_CMS_SIGNER_INFO, SignerId.u.KeyId.pbData) }; - DWORD bytesNeeded; TRACE("%p, %d, %08x, %p, %d, %p\n", pbEncoded, cbEncoded, dwFlags, pvStructInfo, *pcbStructInfo, pcbDecoded); - if ((ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded, - NULL, &bytesNeeded, pcbDecoded))) - { - if (!pvStructInfo) - *pcbStructInfo = bytesNeeded; - else if ((ret = CRYPT_DecodeEnsureSpace(0, NULL, pvStructInfo, - pcbStructInfo, bytesNeeded))) - { - CRYPT_SIGNED_INFO *info = (CRYPT_SIGNED_INFO *) - ((BYTE *)pvStructInfo - offsetof(CRYPT_SIGNED_INFO, cSignerInfo)); - - ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded, - &info->cSignerInfo, &bytesNeeded, pcbDecoded); - } - } + ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded, + pvStructInfo, pcbStructInfo, pcbDecoded); return ret; }