Fix from 1.0.0-stable branch.
[oweals/openssl.git] / crypto / objects / obj_lib.c
index 0c71639ebaff15eac6c1506dae9f76f83aeda899..706fa0b0e78cec1da503471e4800a11eba6316fc 100644 (file)
@@ -62,7 +62,7 @@
 #include <openssl/objects.h>
 #include <openssl/buffer.h>
 
-ASN1_OBJECT *OBJ_dup(ASN1_OBJECT *o)
+ASN1_OBJECT *OBJ_dup(const ASN1_OBJECT *o)
        {
        ASN1_OBJECT *r;
        int i;
@@ -70,7 +70,8 @@ ASN1_OBJECT *OBJ_dup(ASN1_OBJECT *o)
 
        if (o == NULL) return(NULL);
        if (!(o->flags & ASN1_OBJECT_FLAG_DYNAMIC))
-               return(o);
+               return((ASN1_OBJECT *)o); /* XXX: ugh! Why? What kind of
+                                            duplication is this??? */
 
        r=ASN1_OBJECT_new();
        if (r == NULL)
@@ -81,7 +82,8 @@ ASN1_OBJECT *OBJ_dup(ASN1_OBJECT *o)
        r->data=OPENSSL_malloc(o->length);
        if (r->data == NULL)
                goto err;
-       memcpy(r->data,o->data,o->length);
+       if (o->data != NULL)
+               memcpy(r->data,o->data,o->length);
        r->length=o->length;
        r->nid=o->nid;
        r->ln=r->sn=NULL;
@@ -116,7 +118,7 @@ err:
        return(NULL);
        }
 
-int OBJ_cmp(ASN1_OBJECT *a, ASN1_OBJECT *b)
+int OBJ_cmp(const ASN1_OBJECT *a, const ASN1_OBJECT *b)
        {
        int ret;