From 6b0f09b4c3d22a4c7e4d6079e7723cb014ae283c Mon Sep 17 00:00:00 2001 From: Juan Lang Date: Wed, 27 Aug 2008 11:02:13 -0700 Subject: [PATCH] Don't ignore errors when encoding items in an array --- dlls/crypt32/encode.c | 118 +++++++++++++++++++++++++++---------------------- 1 files changed, 64 insertions(+), 54 deletions(-) diff --git a/dlls/crypt32/encode.c b/dlls/crypt32/encode.c index 0bcdad8..addd718 100644 --- a/dlls/crypt32/encode.c +++ b/dlls/crypt32/encode.c @@ -578,27 +578,31 @@ static BOOL WINAPI CRYPT_AsnEncodeCRLEnt if (ret) dataLen += size; } - CRYPT_EncodeLen(dataLen, NULL, &lenBytes); - bytesNeeded = 1 + lenBytes + dataLen; - if (!pbEncoded) - *pcbEncoded = bytesNeeded; - else + if (ret) { - if ((ret = CRYPT_EncodeEnsureSpace(dwFlags, pEncodePara, pbEncoded, - pcbEncoded, bytesNeeded))) + CRYPT_EncodeLen(dataLen, NULL, &lenBytes); + bytesNeeded = 1 + lenBytes + dataLen; + if (!pbEncoded) + *pcbEncoded = bytesNeeded; + else { - if (dwFlags & CRYPT_ENCODE_ALLOC_FLAG) - pbEncoded = *(BYTE **)pbEncoded; - *pbEncoded++ = ASN_SEQUENCEOF; - CRYPT_EncodeLen(dataLen, pbEncoded, &lenBytes); - pbEncoded += lenBytes; - for (i = 0; i < cCRLEntry; i++) + if ((ret = CRYPT_EncodeEnsureSpace(dwFlags, pEncodePara, pbEncoded, + pcbEncoded, bytesNeeded))) { - DWORD size = dataLen; + if (dwFlags & CRYPT_ENCODE_ALLOC_FLAG) + pbEncoded = *(BYTE **)pbEncoded; + *pbEncoded++ = ASN_SEQUENCEOF; + CRYPT_EncodeLen(dataLen, pbEncoded, &lenBytes); + pbEncoded += lenBytes; + for (i = 0; i < cCRLEntry; i++) + { + DWORD size = dataLen; - ret = CRYPT_AsnEncodeCRLEntry(&rgCRLEntry[i], pbEncoded, &size); - pbEncoded += size; - dataLen -= size; + ret = CRYPT_AsnEncodeCRLEntry(&rgCRLEntry[i], pbEncoded, + &size); + pbEncoded += size; + dataLen -= size; + } } } } @@ -731,28 +735,31 @@ static BOOL WINAPI CRYPT_AsnEncodeExtens if (ret) dataLen += size; } - CRYPT_EncodeLen(dataLen, NULL, &lenBytes); - bytesNeeded = 1 + lenBytes + dataLen; - if (!pbEncoded) - *pcbEncoded = bytesNeeded; - else + if (ret) { - if ((ret = CRYPT_EncodeEnsureSpace(dwFlags, pEncodePara, pbEncoded, - pcbEncoded, bytesNeeded))) + CRYPT_EncodeLen(dataLen, NULL, &lenBytes); + bytesNeeded = 1 + lenBytes + dataLen; + if (!pbEncoded) + *pcbEncoded = bytesNeeded; + else { - if (dwFlags & CRYPT_ENCODE_ALLOC_FLAG) - pbEncoded = *(BYTE **)pbEncoded; - *pbEncoded++ = ASN_SEQUENCEOF; - CRYPT_EncodeLen(dataLen, pbEncoded, &lenBytes); - pbEncoded += lenBytes; - for (i = 0; i < exts->cExtension; i++) + if ((ret = CRYPT_EncodeEnsureSpace(dwFlags, pEncodePara, + pbEncoded, pcbEncoded, bytesNeeded))) { - DWORD size = dataLen; + if (dwFlags & CRYPT_ENCODE_ALLOC_FLAG) + pbEncoded = *(BYTE **)pbEncoded; + *pbEncoded++ = ASN_SEQUENCEOF; + CRYPT_EncodeLen(dataLen, pbEncoded, &lenBytes); + pbEncoded += lenBytes; + for (i = 0; i < exts->cExtension; i++) + { + DWORD size = dataLen; - ret = CRYPT_AsnEncodeExtension(&exts->rgExtension[i], - pbEncoded, &size); - pbEncoded += size; - dataLen -= size; + ret = CRYPT_AsnEncodeExtension(&exts->rgExtension[i], + pbEncoded, &size); + pbEncoded += size; + dataLen -= size; + } } } } @@ -1459,29 +1466,32 @@ static BOOL WINAPI CRYPT_AsnEncodeSMIMEC if (ret) dataLen += size; } - CRYPT_EncodeLen(dataLen, NULL, &lenBytes); - bytesNeeded = 1 + lenBytes + dataLen; - if (!pbEncoded) - *pcbEncoded = bytesNeeded; - else + if (ret) { - if ((ret = CRYPT_EncodeEnsureSpace(dwFlags, pEncodePara, pbEncoded, - pcbEncoded, bytesNeeded))) + CRYPT_EncodeLen(dataLen, NULL, &lenBytes); + bytesNeeded = 1 + lenBytes + dataLen; + if (!pbEncoded) + *pcbEncoded = bytesNeeded; + else { - if (dwFlags & CRYPT_ENCODE_ALLOC_FLAG) - pbEncoded = *(BYTE **)pbEncoded; - *pbEncoded++ = ASN_SEQUENCEOF; - CRYPT_EncodeLen(dataLen, pbEncoded, &lenBytes); - pbEncoded += lenBytes; - for (i = 0; i < capabilities->cCapability; i++) + if ((ret = CRYPT_EncodeEnsureSpace(dwFlags, pEncodePara, + pbEncoded, pcbEncoded, bytesNeeded))) { - DWORD size = dataLen; + if (dwFlags & CRYPT_ENCODE_ALLOC_FLAG) + pbEncoded = *(BYTE **)pbEncoded; + *pbEncoded++ = ASN_SEQUENCEOF; + CRYPT_EncodeLen(dataLen, pbEncoded, &lenBytes); + pbEncoded += lenBytes; + for (i = 0; i < capabilities->cCapability; i++) + { + DWORD size = dataLen; - ret = CRYPT_AsnEncodeSMIMECapability(dwCertEncodingType, - NULL, &capabilities->rgCapability[i], 0, NULL, pbEncoded, - &size); - pbEncoded += size; - dataLen -= size; + ret = CRYPT_AsnEncodeSMIMECapability(dwCertEncodingType, + NULL, &capabilities->rgCapability[i], 0, NULL, + pbEncoded, &size); + pbEncoded += size; + dataLen -= size; + } } } } -- 1.4.1