From e9b8eb315556eedb77e5cff818f798d5065a31c6 Mon Sep 17 00:00:00 2001 From: stephen Date: Thu, 31 Dec 1998 00:59:02 +0000 Subject: [PATCH] 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. --- crypto/asn1/asn1_mac.h | 16 ++++++++++++++++ crypto/stack/stack.c | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) 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 :-( */ -- 2.25.1