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.
This commit is contained in:
stephen
1998-12-31 00:59:02 +00:00
parent 88fce97953
commit e9b8eb3155
2 changed files with 17 additions and 1 deletions

View File

@@ -213,8 +213,16 @@ err:\
if (Tinf & 0x80) \ if (Tinf & 0x80) \
{ c.error=ERR_R_BAD_ASN1_OBJECT_HEADER; \ { c.error=ERR_R_BAD_ASN1_OBJECT_HEADER; \
c.line=__LINE__; goto err; } \ 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) \ if (func(&(r),&c.p,Tlen) == NULL) \
{ c.line=__LINE__; goto err; } \ { 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); \ c.slen-=(c.p-c.q); \
} }
@@ -230,10 +238,18 @@ err:\
if (Tinf & 0x80) \ if (Tinf & 0x80) \
{ c.error=ERR_R_BAD_ASN1_OBJECT_HEADER; \ { c.error=ERR_R_BAD_ASN1_OBJECT_HEADER; \
c.line=__LINE__; goto err; } \ 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, \ if (d2i_ASN1_SET(&(r),&c.p,Tlen,(char *(*)())func, \
(void (*)())free_func, \ (void (*)())free_func, \
b,V_ASN1_UNIVERSAL) == NULL) \ b,V_ASN1_UNIVERSAL) == NULL) \
{ c.line=__LINE__; goto err; } \ { 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); \ c.slen-=(c.p-c.q); \
} }

View File

@@ -161,7 +161,7 @@ int loc;
f=(char **)st->data; f=(char **)st->data;
t=(char **)&(st->data[1]); t=(char **)&(st->data[1]);
for (i=st->num; i>loc; i--) for (i=st->num; i>=loc; i--)
t[i]=f[i]; t[i]=f[i];
#ifdef undef /* no memmove on sunos :-( */ #ifdef undef /* no memmove on sunos :-( */