projects
/
openssl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add error checking to obj_xref.pl and add command line support for data
[openssl.git]
/
crypto
/
objects
/
obj_lib.c
diff --git
a/crypto/objects/obj_lib.c
b/crypto/objects/obj_lib.c
index 0c71639ebaff15eac6c1506dae9f76f83aeda899..23e9d48cdf3dc3514339d20e7a3d54cb036c25c1 100644
(file)
--- a/
crypto/objects/obj_lib.c
+++ b/
crypto/objects/obj_lib.c
@@
-62,15
+62,17
@@
#include <openssl/objects.h>
#include <openssl/buffer.h>
#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;
{
ASN1_OBJECT *r;
int i;
- char *ln=NULL;
+ char *ln=NULL,*sn=NULL;
+ unsigned char *data=NULL;
if (o == NULL) return(NULL);
if (!(o->flags & ASN1_OBJECT_FLAG_DYNAMIC))
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)
r=ASN1_OBJECT_new();
if (r == NULL)
@@
-78,45
+80,46
@@
ASN1_OBJECT *OBJ_dup(ASN1_OBJECT *o)
OBJerr(OBJ_F_OBJ_DUP,ERR_R_ASN1_LIB);
return(NULL);
}
OBJerr(OBJ_F_OBJ_DUP,ERR_R_ASN1_LIB);
return(NULL);
}
-
r->
data=OPENSSL_malloc(o->length);
- if (
r->
data == NULL)
+ data=OPENSSL_malloc(o->length);
+ if (data == NULL)
goto err;
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->length=o->length;
r->nid=o->nid;
r->ln=r->sn=NULL;
if (o->ln != NULL)
{
i=strlen(o->ln)+1;
-
r->ln=
ln=OPENSSL_malloc(i);
- if (
r->
ln == NULL) goto err;
+ ln=OPENSSL_malloc(i);
+ if (ln == NULL) goto err;
memcpy(ln,o->ln,i);
memcpy(ln,o->ln,i);
+ r->ln=ln;
}
if (o->sn != NULL)
{
}
if (o->sn != NULL)
{
- char *s;
-
i=strlen(o->sn)+1;
i=strlen(o->sn)+1;
- r->sn=s=OPENSSL_malloc(i);
- if (r->sn == NULL) goto err;
- memcpy(s,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);
}
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 (ln != NULL) OPENSSL_free(ln);
- if (r->data != NULL) OPENSSL_free(r->data);
- OPENSSL_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);
}
return(NULL);
}
-int OBJ_cmp(
ASN1_OBJECT *a,
ASN1_OBJECT *b)
+int OBJ_cmp(
const ASN1_OBJECT *a, const
ASN1_OBJECT *b)
{
int ret;
{
int ret;