Fix a typo in a_enum.c.
[openssl.git] / crypto / asn1 / a_enum.c
index 32cfe5b599e75aa51960acd16782285d490ba3a8..56ee787a23e0cdbe8fcca1c0e338e3ef3aeb5ecc 100644 (file)
@@ -69,7 +69,7 @@ ASN1_ENUMERATED *ASN1_ENUMERATED_new(void)
 { return M_ASN1_ENUMERATED_new(); }
 
 void ASN1_ENUMERATED_free(ASN1_ENUMERATED *x)
-{ return M_ASN1_ENUMERATED_free(x); }
+{ M_ASN1_ENUMERATED_free(x); }
 
 int i2d_ASN1_ENUMERATED(ASN1_ENUMERATED *a, unsigned char **pp)
        {
@@ -177,7 +177,12 @@ ASN1_ENUMERATED *d2i_ASN1_ENUMERATED(ASN1_ENUMERATED **a, unsigned char **pp,
                goto err;
                }
        to=s;
-       if (*p & 0x80) /* a negative number */
+       if(!len) {
+               /* Strictly speaking this is an illegal ENUMERATED but we
+                * tolerate it.
+                */
+               ret->type=V_ASN1_ENUMERATED;
+       } else if (*p & 0x80) /* a negative number */
                {
                ret->type=V_ASN1_NEG_ENUMERATED;
                if ((*p == 0xff) && (len != 1)) {