summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRich Salz <rsalz@openssl.org>2018-03-27 16:25:08 -0400
committerRich Salz <rsalz@openssl.org>2018-03-27 16:25:08 -0400
commite6e9170d6e28038768895e1af18e3aad8093bf4b (patch)
tree62f594f0968ff8d6c27795377a102e4aab373b00
parent98c03302fb7b855647aa14022f61f5fb272e514a (diff)
Allow NULL for some _free routines.
Based on the description in https://github.com/openssl/openssl/pull/5757, this re-implements the "allow NULL to be passed" behavior of a number of xxx_free routines. I also fixed up some egregious formatting errors that were nearby. Reviewed-by: Richard Levitte <levitte@openssl.org> (Merged from https://github.com/openssl/openssl/pull/5761)
-rw-r--r--crypto/bio/bss_acpt.c2
-rw-r--r--crypto/bio/bss_conn.c2
-rw-r--r--crypto/bn/bn_blind.c2
-rw-r--r--crypto/bn/bn_ctx.c2
-rw-r--r--crypto/bn/bn_mont.c14
-rw-r--r--crypto/bn/bn_recp.c6
-rw-r--r--crypto/buffer/buffer.c2
-rw-r--r--crypto/comp/comp_lib.c2
-rw-r--r--crypto/err/err.c29
-rw-r--r--crypto/txt_db/txt_db.c2
-rw-r--r--crypto/x509/x509_lu.c2
-rw-r--r--ssl/s3_lib.c2
-rw-r--r--ssl/ssl_cert.c2
-rw-r--r--ssl/ssl_lib.c2
-rw-r--r--ssl/ssl_sess.c2
15 files changed, 50 insertions, 23 deletions
diff --git a/crypto/bio/bss_acpt.c b/crypto/bio/bss_acpt.c
index 0171c49607..64cc452891 100644
--- a/crypto/bio/bss_acpt.c
+++ b/crypto/bio/bss_acpt.c
@@ -101,6 +101,8 @@ static BIO_ACCEPT *BIO_ACCEPT_new(void)
static void BIO_ACCEPT_free(BIO_ACCEPT *a)
{
+ if (a == NULL)
+ return;
OPENSSL_free(a->param_addr);
OPENSSL_free(a->param_serv);
BIO_ADDRINFO_free(a->addr_first);
diff --git a/crypto/bio/bss_conn.c b/crypto/bio/bss_conn.c
index 0fad02fdd5..cc245ab07c 100644
--- a/crypto/bio/bss_conn.c
+++ b/crypto/bio/bss_conn.c
@@ -232,6 +232,8 @@ BIO_CONNECT *BIO_CONNECT_new(void)
void BIO_CONNECT_free(BIO_CONNECT *a)
{
+ if (a == NULL)
+ return;
OPENSSL_free(a->param_hostname);
OPENSSL_free(a->param_service);
BIO_ADDRINFO_free(a->addr_first);
diff --git a/crypto/bn/bn_blind.c b/crypto/bn/bn_blind.c
index 8bd61567e7..985d3ef32b 100644
--- a/crypto/bn/bn_blind.c
+++ b/crypto/bn/bn_blind.c
@@ -80,6 +80,8 @@ BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai, BIGNUM *mod)
void BN_BLINDING_free(BN_BLINDING *r)
{
+ if (r == NULL)
+ return;
BN_free(r->A);
BN_free(r->Ai);
BN_free(r->e);
diff --git a/crypto/bn/bn_ctx.c b/crypto/bn/bn_ctx.c
index 7202aef326..68c0468743 100644
--- a/crypto/bn/bn_ctx.c
+++ b/crypto/bn/bn_ctx.c
@@ -156,6 +156,8 @@ BN_CTX *BN_CTX_secure_new(void)
void BN_CTX_free(BN_CTX *ctx)
{
+ if (ctx == NULL)
+ return;
#ifdef BN_CTX_DEBUG
{
BN_POOL_ITEM *pool = ctx->pool.head;
diff --git a/crypto/bn/bn_mont.c b/crypto/bn/bn_mont.c
index bae7d235bd..c882891d5e 100644
--- a/crypto/bn/bn_mont.c
+++ b/crypto/bn/bn_mont.c
@@ -208,18 +208,20 @@ BN_MONT_CTX *BN_MONT_CTX_new(void)
void BN_MONT_CTX_init(BN_MONT_CTX *ctx)
{
ctx->ri = 0;
- bn_init(&(ctx->RR));
- bn_init(&(ctx->N));
- bn_init(&(ctx->Ni));
+ bn_init(&ctx->RR);
+ bn_init(&ctx->N);
+ bn_init(&ctx->Ni);
ctx->n0[0] = ctx->n0[1] = 0;
ctx->flags = 0;
}
void BN_MONT_CTX_free(BN_MONT_CTX *mont)
{
- BN_clear_free(&(mont->RR));
- BN_clear_free(&(mont->N));
- BN_clear_free(&(mont->Ni));
+ if (mont == NULL)
+ return;
+ BN_clear_free(&mont->RR);
+ BN_clear_free(&mont->N);
+ BN_clear_free(&mont->Ni);
if (mont->flags & BN_FLG_MALLOCED)
OPENSSL_free(mont);
}
diff --git a/crypto/bn/bn_recp.c b/crypto/bn/bn_recp.c
index 923a9b33d8..8eb500b61a 100644
--- a/crypto/bn/bn_recp.c
+++ b/crypto/bn/bn_recp.c
@@ -32,8 +32,10 @@ BN_RECP_CTX *BN_RECP_CTX_new(void)
void BN_RECP_CTX_free(BN_RECP_CTX *recp)
{
- BN_free(&(recp->N));
- BN_free(&(recp->Nr));
+ if (recp == NULL)
+ return;
+ BN_free(&recp->N);
+ BN_free(&recp->Nr);
if (recp->flags & BN_FLG_MALLOCED)
OPENSSL_free(recp);
}
diff --git a/crypto/buffer/buffer.c b/crypto/buffer/buffer.c
index dfa5c23d1d..48618a4435 100644
--- a/crypto/buffer/buffer.c
+++ b/crypto/buffer/buffer.c
@@ -42,6 +42,8 @@ BUF_MEM *BUF_MEM_new(void)
void BUF_MEM_free(BUF_MEM *a)
{
+ if (a == NULL)
+ return;
if (a->data != NULL) {
if (a->flags & BUF_MEM_FLAG_SECURE)
OPENSSL_secure_clear_free(a->data, a->max);
diff --git a/crypto/comp/comp_lib.c b/crypto/comp/comp_lib.c
index 5bed1876a8..c199bb352f 100644
--- a/crypto/comp/comp_lib.c
+++ b/crypto/comp/comp_lib.c
@@ -45,6 +45,8 @@ const char *COMP_get_name(const COMP_METHOD *meth)
void COMP_CTX_free(COMP_CTX *ctx)
{
+ if (ctx == NULL)
+ return;
if (ctx->meth->finish != NULL)
ctx->meth->finish(ctx);
diff --git a/crypto/err/err.c b/crypto/err/err.c
index 4ae6178686..4c5f354e5c 100644
--- a/crypto/err/err.c
+++ b/crypto/err/err.c
@@ -233,29 +233,30 @@ static void build_SYS_str_reasons(void)
}
#endif
-#define err_clear_data(p,i) \
+#define err_clear_data(p, i) \
do { \
- if ((p)->err_data_flags[i] & ERR_TXT_MALLOCED) \
- { \
+ if ((p)->err_data_flags[i] & ERR_TXT_MALLOCED) {\
OPENSSL_free((p)->err_data[i]); \
- (p)->err_data[i]=NULL; \
- } \
- (p)->err_data_flags[i]=0; \
- } while(0)
+ (p)->err_data[i] = NULL; \
+ } \
+ (p)->err_data_flags[i] = 0; \
+ } while (0)
-#define err_clear(p,i) \
+#define err_clear(p, i) \
do { \
- (p)->err_flags[i]=0; \
- (p)->err_buffer[i]=0; \
- err_clear_data(p,i); \
- (p)->err_file[i]=NULL; \
- (p)->err_line[i]= -1; \
- } while(0)
+ err_clear_data(p, i); \
+ (p)->err_flags[i] = 0; \
+ (p)->err_buffer[i] = 0; \
+ (p)->err_file[i] = NULL; \
+ (p)->err_line[i] = -1; \
+ } while (0)
static void ERR_STATE_free(ERR_STATE *s)
{
int i;
+ if (s == NULL)
+ return;
for (i = 0; i < ERR_NUM_ERRORS; i++) {
err_clear_data(s, i);
}
diff --git a/crypto/txt_db/txt_db.c b/crypto/txt_db/txt_db.c
index a08f346af6..a00560dcbd 100644
--- a/crypto/txt_db/txt_db.c
+++ b/crypto/txt_db/txt_db.c
@@ -284,6 +284,8 @@ void TXT_DB_free(TXT_DB *db)
int i, n;
char **p, *max;
+ if (db == NULL)
+ return;
if (db->index != NULL) {
for (i = db->num_fields - 1; i >= 0; i--)
lh_OPENSSL_STRING_free(db->index[i]);
diff --git a/crypto/x509/x509_lu.c b/crypto/x509/x509_lu.c
index d69cedb72f..7b33ebad73 100644
--- a/crypto/x509/x509_lu.c
+++ b/crypto/x509/x509_lu.c
@@ -178,6 +178,8 @@ void X509_STORE_free(X509_STORE *vfy)
STACK_OF(X509_LOOKUP) *sk;
X509_LOOKUP *lu;
+ if (vfy == NULL)
+ return;
CRYPTO_DOWN_REF(&vfy->references, &i, vfy->lock);
REF_PRINT_COUNT("X509_STORE", vfy);
if (i > 0)
diff --git a/ssl/s3_lib.c b/ssl/s3_lib.c
index 78a5a3a2e2..619326949c 100644
--- a/ssl/s3_lib.c
+++ b/ssl/s3_lib.c
@@ -3312,7 +3312,7 @@ int ssl3_new(SSL *s)
void ssl3_free(SSL *s)
{
- if (s->s3 == NULL)
+ if (s == NULL || s->s3 == NULL)
return;
ssl3_cleanup_key_block(s);
diff --git a/ssl/ssl_cert.c b/ssl/ssl_cert.c
index 5a465e3942..b2b342767c 100644
--- a/ssl/ssl_cert.c
+++ b/ssl/ssl_cert.c
@@ -225,6 +225,8 @@ void ssl_cert_free(CERT *c)
{
int i;
+ if (c == NULL)
+ return;
CRYPTO_DOWN_REF(&c->references, &i, c->lock);
REF_PRINT_COUNT("CERT", c);
if (i > 0)
diff --git a/ssl/ssl_lib.c b/ssl/ssl_lib.c
index b678fcfbbb..9d4c4d4899 100644
--- a/ssl/ssl_lib.c
+++ b/ssl/ssl_lib.c
@@ -1125,6 +1125,8 @@ void SSL_free(SSL *s)
{
int i;
+ if (s == NULL)
+ return;
CRYPTO_DOWN_REF(&s->references, &i, s->lock);
REF_PRINT_COUNT("SSL", s);
if (i > 0)
diff --git a/ssl/ssl_sess.c b/ssl/ssl_sess.c
index 1672cd2a95..f936cb687f 100644
--- a/ssl/ssl_sess.c
+++ b/ssl/ssl_sess.c
@@ -785,6 +785,8 @@ void SSL_SESSION_free(SSL_SESSION *ss)
{
int i;
+ if (ss == NULL)
+ return;
CRYPTO_DOWN_REF(&ss->references, &i, ss->lock);
REF_PRINT_COUNT("SSL_SESSION", ss);
if (i > 0)