From: stephen Date: Thu, 31 Dec 1998 00:59:02 +0000 (+0000) Subject: Fix for sk_insert bug: it never worked properly. X-Git-Tag: OpenSSL_0_9_2b~317 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=e9b8eb315556eedb77e5cff818f798d5065a31c6;p=oweals%2Fopenssl.git Fix for sk_insert bug: it never worked properly. Allow explicit tag asn macros to handle indefinite length constructed stuff: without this certain "certificates" can't be read in. --- diff --git a/crypto/asn1/asn1_mac.h b/crypto/asn1/asn1_mac.h index 834ed58f74..d4e36fb1db 100644 --- a/crypto/asn1/asn1_mac.h +++ b/crypto/asn1/asn1_mac.h @@ -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); \ } diff --git a/crypto/stack/stack.c b/crypto/stack/stack.c index c426253072..1c0a8bdda8 100644 --- a/crypto/stack/stack.c +++ b/crypto/stack/stack.c @@ -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 :-( */