2 * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
4 * Licensed under the OpenSSL license (the "License"). You may not use
5 * this file except in compliance with the License. You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
11 #include "internal/cryptlib.h"
12 #include <openssl/lhash.h>
13 #include <openssl/objects.h>
14 #include <openssl/buffer.h>
15 #include "internal/asn1_int.h"
17 ASN1_OBJECT *OBJ_dup(const ASN1_OBJECT *o)
21 char *ln = NULL, *sn = NULL;
22 unsigned char *data = NULL;
26 if (!(o->flags & ASN1_OBJECT_FLAG_DYNAMIC))
27 return ((ASN1_OBJECT *)o); /* XXX: ugh! Why? What kind of duplication
30 r = ASN1_OBJECT_new();
32 OBJerr(OBJ_F_OBJ_DUP, ERR_R_ASN1_LIB);
35 data = OPENSSL_malloc(o->length);
39 memcpy(data, o->data, o->length);
40 /* once data attached to object it remains const */
42 r->length = o->length;
46 i = strlen(o->ln) + 1;
47 ln = OPENSSL_malloc(i);
55 i = strlen(o->sn) + 1;
56 sn = OPENSSL_malloc(i);
62 r->flags = o->flags | (ASN1_OBJECT_FLAG_DYNAMIC |
63 ASN1_OBJECT_FLAG_DYNAMIC_STRINGS |
64 ASN1_OBJECT_FLAG_DYNAMIC_DATA);
67 OBJerr(OBJ_F_OBJ_DUP, ERR_R_MALLOC_FAILURE);
75 int OBJ_cmp(const ASN1_OBJECT *a, const ASN1_OBJECT *b)
79 ret = (a->length - b->length);
82 return (memcmp(a->data, b->data, a->length));