Revert to original...
[oweals/openssl.git] / crypto / asn1 / a_object.c
index a11d25e1fb7a8b8ca172fb2a080e5a80e53dd969..6a421a66a639c428da810779b6b95d977ca37fc4 100644 (file)
@@ -186,7 +186,7 @@ int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num)
                                        goto err;
                                }
                        while(blsize--)
-                               tmp[i++] = BN_div_word(bl, 0x80L);
+                               tmp[i++] = (unsigned char)BN_div_word(bl, 0x80L);
                        }
                else
                        {
@@ -246,6 +246,8 @@ int i2a_ASN1_OBJECT(BIO *bp, ASN1_OBJECT *a)
                        return -1;
                i2t_ASN1_OBJECT(p,i + 1,a);
                }
+       if (i <= 0)
+               return BIO_write(bp, "<INVALID>", 9);
        BIO_write(bp,p,i);
        if (p != buf)
                OPENSSL_free(p);
@@ -278,8 +280,6 @@ ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp,
        return ret;
 err:
        ASN1err(ASN1_F_D2I_ASN1_OBJECT,i);
-       if ((ret != NULL) && ((a == NULL) || (*a != ret)))
-               ASN1_OBJECT_free(ret);
        return(NULL);
 }
 ASN1_OBJECT *c2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp,