Handle BER length encoding.

Tolerate BER length encoding which may include leading zeroes.

PR#2746
This commit is contained in:
Dr. Stephen Henson 2014-06-28 14:04:36 +01:00
parent a356e488ad
commit 0e7bda79a1

View File

@ -170,14 +170,20 @@ static int asn1_get_length(const unsigned char **pp, int *inf, long *rl, int max
i= *p&0x7f;
if (*(p++) & 0x80)
{
if (max < (int)i)
return 0;
/* Skip leading zeroes */
while (i && *p == 0)
{
p++;
i--;
}
if (i > sizeof(long))
return 0;
if (max-- == 0) return(0);
while (i-- > 0)
{
ret<<=8L;
ret|= *(p++);
if (max-- == 0) return(0);
}
}
else