summaryrefslogtreecommitdiffstats
path: root/crypto
diff options
context:
space:
mode:
authorDr. Stephen Henson <steve@openssl.org>1999-11-08 13:58:08 +0000
committerDr. Stephen Henson <steve@openssl.org>1999-11-08 13:58:08 +0000
commita0ad17bb6cccef6eb7ff0b25403ec2bbc0bd122e (patch)
tree463e559c53a5e7f8dafaa4c3f1416ea8ce23f104 /crypto
parentce1b4fe14648007bf054cf54846c0620e4605251 (diff)
Fix to the -revoke option in ca. It was leaking memory, crashing and just
plain not working :-( Also fix some memory leaks in the new X509_NAME code. Fix so new app_rand code doesn't crash 'x509' and move #include so it compiles under Win32.
Diffstat (limited to 'crypto')
-rw-r--r--crypto/asn1/a_strnid.c1
-rw-r--r--crypto/asn1/x_x509a.c1
-rw-r--r--crypto/x509/x509name.c25
3 files changed, 22 insertions, 5 deletions
diff --git a/crypto/asn1/a_strnid.c b/crypto/asn1/a_strnid.c
index cb37024db2..e2e100e2eb 100644
--- a/crypto/asn1/a_strnid.c
+++ b/crypto/asn1/a_strnid.c
@@ -188,6 +188,7 @@ void ASN1_STRING_TABLE_cleanup(void)
{
STACK_OF(ASN1_STRING_TABLE) *tmp;
tmp = stable;
+ if(!tmp) return;
stable = NULL;
sk_ASN1_STRING_TABLE_pop_free(tmp, st_free);
}
diff --git a/crypto/asn1/x_x509a.c b/crypto/asn1/x_x509a.c
index 4b1f448d84..d8409fbbff 100644
--- a/crypto/asn1/x_x509a.c
+++ b/crypto/asn1/x_x509a.c
@@ -117,6 +117,7 @@ void X509_CERT_AUX_free(X509_CERT_AUX *a)
sk_ASN1_OBJECT_pop_free(a->othernotrust, ASN1_OBJECT_free);
ASN1_UTF8STRING_free(a->alias);
ASN1_TYPE_free(a->other);
+ Free((char *)a);
}
int i2d_X509_CERT_AUX(X509_CERT_AUX *a, unsigned char **pp)
diff --git a/crypto/x509/x509name.c b/crypto/x509/x509name.c
index bd7b985629..b4ceb65851 100644
--- a/crypto/x509/x509name.c
+++ b/crypto/x509/x509name.c
@@ -175,27 +175,36 @@ int X509_NAME_add_entry_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj, int type,
unsigned char *bytes, int len, int loc, int set)
{
X509_NAME_ENTRY *ne;
+ int ret;
ne = X509_NAME_ENTRY_create_by_OBJ(NULL, obj, type, bytes, len);
if(!ne) return 0;
- return X509_NAME_add_entry(name, ne, loc, set);
+ ret = X509_NAME_add_entry(name, ne, loc, set);
+ X509_NAME_ENTRY_free(ne);
+ return ret;
}
int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type,
unsigned char *bytes, int len, int loc, int set)
{
X509_NAME_ENTRY *ne;
+ int ret;
ne = X509_NAME_ENTRY_create_by_NID(NULL, nid, type, bytes, len);
if(!ne) return 0;
- return X509_NAME_add_entry(name, ne, loc, set);
+ ret = X509_NAME_add_entry(name, ne, loc, set);
+ X509_NAME_ENTRY_free(ne);
+ return ret;
}
int X509_NAME_add_entry_by_txt(X509_NAME *name, char *field, int type,
unsigned char *bytes, int len, int loc, int set)
{
X509_NAME_ENTRY *ne;
+ int ret;
ne = X509_NAME_ENTRY_create_by_txt(NULL, field, type, bytes, len);
if(!ne) return 0;
- return X509_NAME_add_entry(name, ne, loc, set);
+ ret = X509_NAME_add_entry(name, ne, loc, set);
+ X509_NAME_ENTRY_free(ne);
+ return ret;
}
/* if set is -1, append to previous set, 0 'a new one', and 1,
@@ -267,6 +276,7 @@ X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne,
char *field, int type, unsigned char *bytes, int len)
{
ASN1_OBJECT *obj;
+ X509_NAME_ENTRY *nentry;
obj=OBJ_txt2obj(field, 0);
if (obj == NULL)
@@ -275,13 +285,16 @@ X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne,
X509_R_INVALID_FIELD_NAME);
return(NULL);
}
- return(X509_NAME_ENTRY_create_by_OBJ(ne,obj,type,bytes,len));
+ nentry = X509_NAME_ENTRY_create_by_OBJ(ne,obj,type,bytes,len);
+ ASN1_OBJECT_free(obj);
+ return nentry;
}
X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid,
int type, unsigned char *bytes, int len)
{
ASN1_OBJECT *obj;
+ X509_NAME_ENTRY *nentry;
obj=OBJ_nid2obj(nid);
if (obj == NULL)
@@ -289,7 +302,9 @@ X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid,
X509err(X509_F_X509_NAME_ENTRY_CREATE_BY_NID,X509_R_UNKNOWN_NID);
return(NULL);
}
- return(X509_NAME_ENTRY_create_by_OBJ(ne,obj,type,bytes,len));
+ nentry = X509_NAME_ENTRY_create_by_OBJ(ne,obj,type,bytes,len);
+ ASN1_OBJECT_free(obj);
+ return nentry;
}
X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne,