crypt32: Fix length calculation for decoding CRL_DIST_POINT_NAME.

This commit is contained in:
Juan Lang 2008-08-15 16:19:11 -07:00 committed by Alexandre Julliard
parent 802770299d
commit 9423f836ac

View File

@ -3919,15 +3919,19 @@ static BOOL CRYPT_AsnDecodeDistPointName(const BYTE *pbEncoded,
sizeof(CERT_ALT_NAME_ENTRY), TRUE, sizeof(CERT_ALT_NAME_ENTRY), TRUE,
offsetof(CERT_ALT_NAME_ENTRY, u.pwszURL) }; offsetof(CERT_ALT_NAME_ENTRY, u.pwszURL) };
BYTE lenBytes = GET_LEN_BYTES(pbEncoded[1]); BYTE lenBytes = GET_LEN_BYTES(pbEncoded[1]);
DWORD nameLen;
if (dataLen) if (dataLen)
{ {
DWORD nameLen;
ret = CRYPT_AsnDecodeArray(&arrayDesc, ret = CRYPT_AsnDecodeArray(&arrayDesc,
pbEncoded + 1 + lenBytes, cbEncoded - 1 - lenBytes, pbEncoded + 1 + lenBytes, cbEncoded - 1 - lenBytes,
0, NULL, NULL, &nameLen, NULL, NULL); 0, NULL, NULL, &nameLen, NULL, NULL);
bytesNeeded = sizeof(CRL_DIST_POINT_NAME) + nameLen; /* The CERT_ALT_NAME_INFO's size is included by CRYPT_AsnDecodeArray
* as the sizeof(struct GenericArray), so don't include it in the
* total bytes needed.
*/
bytesNeeded = sizeof(CRL_DIST_POINT_NAME) + nameLen -
sizeof(CERT_ALT_NAME_INFO);
} }
else else
bytesNeeded = sizeof(CRL_DIST_POINT_NAME); bytesNeeded = sizeof(CRL_DIST_POINT_NAME);
@ -3951,7 +3955,7 @@ static BOOL CRYPT_AsnDecodeDistPointName(const BYTE *pbEncoded,
name->dwDistPointNameChoice = CRL_DIST_POINT_FULL_NAME; name->dwDistPointNameChoice = CRL_DIST_POINT_FULL_NAME;
ret = CRYPT_AsnDecodeArray(&arrayDesc, ret = CRYPT_AsnDecodeArray(&arrayDesc,
pbEncoded + 1 + lenBytes, cbEncoded - 1 - lenBytes, pbEncoded + 1 + lenBytes, cbEncoded - 1 - lenBytes,
0, NULL, &name->u.FullName, pcbStructInfo, NULL, 0, NULL, &name->u.FullName, &nameLen, NULL,
name->u.FullName.rgAltEntry); name->u.FullName.rgAltEntry);
} }
else else