Stage 1 GOST ciphersuite support.
[openssl.git] / crypto / objects / obj_lib.c
index 1a1ba0fc063cf548d935c17cef95ece4cddb4c26..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)
@@ -78,17 +79,18 @@ ASN1_OBJECT *OBJ_dup(ASN1_OBJECT *o)
                OBJerr(OBJ_F_OBJ_DUP,ERR_R_ASN1_LIB);
                return(NULL);
                }
-       r->data=Malloc(o->length);
+       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;
        if (o->ln != NULL)
                {
                i=strlen(o->ln)+1;
-               r->ln=ln=Malloc(i);
+               r->ln=ln=OPENSSL_malloc(i);
                if (r->ln == NULL) goto err;
                memcpy(ln,o->ln,i);
                }
@@ -98,7 +100,7 @@ ASN1_OBJECT *OBJ_dup(ASN1_OBJECT *o)
                char *s;
 
                i=strlen(o->sn)+1;
-               r->sn=s=Malloc(i);
+               r->sn=s=OPENSSL_malloc(i);
                if (r->sn == NULL) goto err;
                memcpy(s,o->sn,i);
                }
@@ -109,14 +111,14 @@ err:
        OBJerr(OBJ_F_OBJ_DUP,ERR_R_MALLOC_FAILURE);
        if (r != NULL)
                {
-               if (ln != NULL) Free(ln);
-               if (r->data != NULL) Free(r->data);
-               Free(r);
+               if (ln != NULL) OPENSSL_free(ln);
+               if (r->data != NULL) OPENSSL_free(r->data);
+               OPENSSL_free(r);
                }
        return(NULL);
        }
 
-int OBJ_cmp(ASN1_OBJECT *a, ASN1_OBJECT *b)
+int OBJ_cmp(const ASN1_OBJECT *a, const ASN1_OBJECT *b)
        {
        int ret;