]> git.ipfire.org Git - thirdparty/openssl.git/blobdiff - crypto/asn1/asn1_lib.c
Handle BER length encoding.
[thirdparty/openssl.git] / crypto / asn1 / asn1_lib.c
index 1bcb44aee203637ec70a60fe616588696bac32ac..74ca7d4fa3786600b26ee1b531fd4a13be148d69 100644 (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