From: Dr. Stephen Henson Date: Sat, 28 Jun 2014 13:04:36 +0000 (+0100) Subject: Handle BER length encoding. X-Git-Tag: master-pre-reformat~600^2~5 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0e7bda79a1f60f85873b12135bb29f67ccccf8c8;p=openssl Handle BER length encoding. Tolerate BER length encoding which may include leading zeroes. PR#2746 --- diff --git a/crypto/asn1/asn1_lib.c b/crypto/asn1/asn1_lib.c index 1bcb44aee2..74ca7d4fa3 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