diff options
Diffstat (limited to 'crypto/objects/obj_lib.c')
-rw-r--r-- | crypto/objects/obj_lib.c | 53 |
1 files changed, 28 insertions, 25 deletions
diff --git a/crypto/objects/obj_lib.c b/crypto/objects/obj_lib.c index 16ff85209..23e9d48cd 100644 --- a/crypto/objects/obj_lib.c +++ b/crypto/objects/obj_lib.c @@ -58,65 +58,68 @@ #include <stdio.h> #include "cryptlib.h" -#include "lhash.h" -#include "objects.h" -#include "buffer.h" +#include <openssl/lhash.h> +#include <openssl/objects.h> +#include <openssl/buffer.h> -ASN1_OBJECT *OBJ_dup(o) -ASN1_OBJECT *o; +ASN1_OBJECT *OBJ_dup(const ASN1_OBJECT *o) { ASN1_OBJECT *r; int i; + char *ln=NULL,*sn=NULL; + unsigned char *data=NULL; 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 *)ASN1_OBJECT_new(); + r=ASN1_OBJECT_new(); if (r == NULL) { OBJerr(OBJ_F_OBJ_DUP,ERR_R_ASN1_LIB); return(NULL); } - r->data=(unsigned char *)Malloc(o->length); - if (r->data == NULL) + data=OPENSSL_malloc(o->length); + if (data == NULL) goto err; - memcpy(r->data,o->data,o->length); + if (o->data != NULL) + memcpy(data,o->data,o->length); + /* once data attached to object it remains const */ + r->data = data; r->length=o->length; r->nid=o->nid; r->ln=r->sn=NULL; if (o->ln != NULL) { i=strlen(o->ln)+1; - r->ln=(char *)Malloc(i); - if (r->ln == NULL) goto err; - memcpy(r->ln,o->ln,i); + ln=OPENSSL_malloc(i); + if (ln == NULL) goto err; + memcpy(ln,o->ln,i); + r->ln=ln; } if (o->sn != NULL) { i=strlen(o->sn)+1; - r->sn=(char *)Malloc(i); - if (r->sn == NULL) goto err; - memcpy(r->sn,o->sn,i); + sn=OPENSSL_malloc(i); + if (sn == NULL) goto err; + memcpy(sn,o->sn,i); + r->sn=sn; } r->flags=o->flags|(ASN1_OBJECT_FLAG_DYNAMIC| ASN1_OBJECT_FLAG_DYNAMIC_STRINGS|ASN1_OBJECT_FLAG_DYNAMIC_DATA); return(r); err: OBJerr(OBJ_F_OBJ_DUP,ERR_R_MALLOC_FAILURE); - if (r != NULL) - { - if (r->ln != NULL) Free(r->ln); - if (r->data != NULL) Free(r->data); - Free(r); - } + if (ln != NULL) OPENSSL_free(ln); + if (sn != NULL) OPENSSL_free(sn); + if (data != NULL) OPENSSL_free(data); + if (r != NULL) OPENSSL_free(r); return(NULL); } -int OBJ_cmp(a,b) -ASN1_OBJECT *a; -ASN1_OBJECT *b; +int OBJ_cmp(const ASN1_OBJECT *a, const ASN1_OBJECT *b) { int ret; |