Changes between 0.9.5a and 0.9.6 [xx XXX 2000]
+ *) Fix for a nasty bug in ASN1_TYPE handling. ASN1_TYPE is used for
+ a general "ANY" type, as such it should be able to decode anything
+ including tagged types. However it didn't check the class so it would
+ wrongly interpret tagged types in the same way as their universal
+ counterpart and unknown types were just rejected. Changed so that the
+ tagged and unknown types are handled in the same way as a SEQUENCE:
+ that is the encoding is stored intact. There is also a new type
+ "V_ASN1_OTHER" which is used when the class is not universal, in this
+ case we have no idea what the actual type is so we just lump them all
+ together.
+ [Steve Henson]
+
*) On VMS, stdout may very well lead to a file that is written to
in a record-oriented fashion. That means that every write() will
write a separate record, which will be read separately by the
OpenSSL STATUS Last modified at
- ______________ $Date: 2000/09/21 20:29:00 $
+ ______________ $Date: 2000/09/21 21:00:19 $
DEVELOPMENT STATE
libraries. Tests pass as soon as
you make sure advapi32.lib gets
linked in. [FIXED]
+ VC-NT dynamic libs (NT4 SP6, VC6 SP4) - success
VC-WIN32 (W2K Pro SP1, VC6 SP3, PSDK Jul2000)- success
hpux-parisc-gcc (B.10.20, gcc 2.95.2) - success
hpux-parisc-cc (B.10.20, cc A.10.32.30) - success
hpux-parisc-gcc [engine] (B.10.20, gcc 2.95.2)- success
hpux-parisc-cc [engine] (B.10.20, cc A.10.32.30)- success
+ hpux-parisc2-cc (B.11.11) - success
+ hpux64-parisc2-cc (B.11.11) - success
+ Kevin Steves also mentions that "All the new
+ targets look good on my end with hp-ux 11.0."
+ MPE/iX-gcc - success
FreeBSD (2.2.5) - failed
Only having USE_TOD made speed.c issue an
error. [FIXED]
break;
case V_ASN1_SET:
case V_ASN1_SEQUENCE:
+ case V_ASN1_OTHER:
+ default:
if (a->value.set == NULL)
r=0;
else
inf=ASN1_get_object(&q,&len,&tag,&xclass,length);
if (inf & 0x80) goto err;
+ /* If not universal tag we've no idea what it is */
+ if(xclass != V_ASN1_UNIVERSAL) tag = V_ASN1_OTHER;
ASN1_TYPE_component_free(ret);
break;
case V_ASN1_SET:
case V_ASN1_SEQUENCE:
+ case V_ASN1_OTHER:
+ default:
/* Sets and sequences are left complete */
if ((ret->value.set=ASN1_STRING_new()) == NULL) goto err;
ret->value.set->type=tag;
if (!ASN1_STRING_set(ret->value.set,p,(int)len)) goto err;
p+=len;
break;
- default:
- ASN1err(ASN1_F_D2I_ASN1_TYPE,ASN1_R_BAD_TYPE);
- goto err;
}
ret->type=tag;
case V_ASN1_UNIVERSALSTRING:
case V_ASN1_BMPSTRING:
case V_ASN1_UTF8STRING:
- ASN1_STRING_free((ASN1_STRING *)a->value.ptr);
- break;
+ case V_ASN1_OTHER:
default:
- /* MEMORY LEAK */
+ ASN1_STRING_free((ASN1_STRING *)a->value.ptr);
break;
}
a->type=0;
#define V_ASN1_PRIMATIVE_TAG 0x1f
#define V_ASN1_APP_CHOOSE -2 /* let the recipient choose */
+#define V_ASN1_OTHER -3 /* used in ASN1_TYPE */
#define V_ASN1_NEG 0x100 /* negative flag */