Hi,

In at least OpenSSL 0.9.8s and 1.0.1-beta1 there is a bug in the ASN.1
parser that if one has length data such as

84 00 00 00 00

at the end of a block to be parsed, it will give "header too long" error
even though the ASN.1 is valid. This is because the supplied max value
to asn1_get_length() in crypto/asn1/asn1_lib.c is used incorrectly.

It seems to me that the attached diff (against 1.0.1-beta1) is the
correct fix.

-Tomas



--- asn1_lib.c.orig     2012-01-17 15:37:43.000000000 +0100
+++ asn1_lib.c  2012-01-17 15:33:53.000000000 +0100
@@ -172,12 +172,11 @@
                        {
                        if (i > sizeof(long))
                                return 0;
-                       if (max-- == 0) return(0);
                        while (i-- > 0)
                                {
+                               if (max-- == 0) return(0);
                                ret<<=8L;
                                ret|= *(p++);
-                               if (max-- == 0) return(0);
                                }
                        }
                else

Reply via email to