diff --git a/crypto/asn1/asn1_lib.c b/crypto/asn1/asn1_lib.c index 1bcb44aee203637ec70a60fe616588696bac32ac..74ca7d4fa3786600b26ee1b531fd4a13be148d69 100644 --- a/crypto/asn1/asn1_lib.c +++ b/crypto/asn1/asn1_lib.c @@ -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