Fix for sk_insert bug: it never worked properly.
authorstephen <stephen>
Thu, 31 Dec 1998 00:59:02 +0000 (00:59 +0000)
committerstephen <stephen>
Thu, 31 Dec 1998 00:59:02 +0000 (00:59 +0000)
Allow explicit tag asn macros to handle indefinite length constructed stuff:
without this certain "certificates" can't be read in.

crypto/asn1/asn1_mac.h
crypto/stack/stack.c

index 834ed58f74c0f0106bc52ac4ebae76380e3f44b5..d4e36fb1db0c490ecc3bf21ace8d8852b8f2c6b3 100644 (file)
@@ -213,8 +213,16 @@ err:\
                if (Tinf & 0x80) \
                        { c.error=ERR_R_BAD_ASN1_OBJECT_HEADER; \
                        c.line=__LINE__; goto err; } \
+               if (Tinf == (V_ASN1_CONSTRUCTED+1)) \
+                                       Tlen = c.slen - (c.p - c.q) - 2; \
                if (func(&(r),&c.p,Tlen) == NULL) \
                        { c.line=__LINE__; goto err; } \
+               if (Tinf == (V_ASN1_CONSTRUCTED+1)) { \
+                       Tlen = c.slen - (c.p - c.q); \
+                       if(!ASN1_check_infinite_end(&c.p, Tlen)) \
+                               { c.error=ERR_R_MISSING_ASN1_EOS; \
+                               c.line=__LINE__; goto err; } \
+               }\
                c.slen-=(c.p-c.q); \
                }
 
@@ -230,10 +238,18 @@ err:\
                if (Tinf & 0x80) \
                        { c.error=ERR_R_BAD_ASN1_OBJECT_HEADER; \
                        c.line=__LINE__; goto err; } \
+               if (Tinf == (V_ASN1_CONSTRUCTED+1)) \
+                                       Tlen = c.slen - (c.p - c.q) - 2; \
                if (d2i_ASN1_SET(&(r),&c.p,Tlen,(char *(*)())func, \
                        (void (*)())free_func, \
                        b,V_ASN1_UNIVERSAL) == NULL) \
                        { c.line=__LINE__; goto err; } \
+               if (Tinf == (V_ASN1_CONSTRUCTED+1)) { \
+                       Tlen = c.slen - (c.p - c.q); \
+                       if(!ASN1_check_infinite_end(&c.p, Tlen)) \
+                               { c.error=ERR_R_MISSING_ASN1_EOS; \
+                               c.line=__LINE__; goto err; } \
+               }\
                c.slen-=(c.p-c.q); \
                }
 
index c42625307263c4d6c1a467d838db109cc8c215a3..1c0a8bdda828d1536ae0389a90ff307080bd952a 100644 (file)
@@ -161,7 +161,7 @@ int loc;
 
                f=(char **)st->data;
                t=(char **)&(st->data[1]);
-               for (i=st->num; i>loc; i--)
+               for (i=st->num; i>=loc; i--)
                        t[i]=f[i];
                        
 #ifdef undef /* no memmove on sunos :-( */