diff --git a/CHANGES b/CHANGES index 882b247ba6..8bda119818 100644 --- a/CHANGES +++ b/CHANGES @@ -5,6 +5,9 @@ Changes between 0.9.1c and 0.9.2 + *) Make _all_ *_free functions accept a NULL pointer. + [Frans Heymans ] + *) If a DH key is generated in s3_srvr.c, don't blow it by trying to use NULL pointers. [Anonymous ] diff --git a/crypto/asn1/p7_lib.c b/crypto/asn1/p7_lib.c index 06e1da4a74..4ab64777b3 100644 --- a/crypto/asn1/p7_lib.c +++ b/crypto/asn1/p7_lib.c @@ -267,6 +267,9 @@ PKCS7 *a; void PKCS7_content_free(a) PKCS7 *a; { + if(a == NULL) + return; + if (a->asn1 != NULL) Free((char *)a->asn1); if (a->d.ptr != NULL) diff --git a/crypto/asn1/x_name.c b/crypto/asn1/x_name.c index 3b8bc5191f..3af14c8e6c 100644 --- a/crypto/asn1/x_name.c +++ b/crypto/asn1/x_name.c @@ -263,6 +263,9 @@ X509_NAME_ENTRY *X509_NAME_ENTRY_new() void X509_NAME_free(a) X509_NAME *a; { + if(a == NULL) + return; + BUF_MEM_free(a->bytes); sk_pop_free(a->entries,X509_NAME_ENTRY_free); Free((char *)a); diff --git a/crypto/bio/b_sock.c b/crypto/bio/b_sock.c index 2c36150b9b..402439cc2e 100644 --- a/crypto/bio/b_sock.c +++ b/crypto/bio/b_sock.c @@ -310,6 +310,9 @@ struct hostent *a; { int i; + if(a == NULL) + return; + if (a->h_aliases != NULL) { for (i=0; a->h_aliases[i] != NULL; i++) diff --git a/crypto/bio/bss_acpt.c b/crypto/bio/bss_acpt.c index 872807d863..ecdd1709d1 100644 --- a/crypto/bio/bss_acpt.c +++ b/crypto/bio/bss_acpt.c @@ -173,6 +173,9 @@ BIO_ACCEPT *BIO_ACCEPT_new() void BIO_ACCEPT_free(a) BIO_ACCEPT *a; { + if(a == NULL) + return; + if (a->param_addr != NULL) Free(a->param_addr); if (a->addr != NULL) Free(a->addr); if (a->bio_chain != NULL) BIO_free(a->bio_chain); diff --git a/crypto/bio/bss_conn.c b/crypto/bio/bss_conn.c index 3ec1388f2e..b90fea1a3a 100644 --- a/crypto/bio/bss_conn.c +++ b/crypto/bio/bss_conn.c @@ -357,6 +357,9 @@ BIO_CONNECT *BIO_CONNECT_new() void BIO_CONNECT_free(a) BIO_CONNECT *a; { + if(a == NULL) + return; + if (a->param_hostname != NULL) Free(a->param_hostname); if (a->param_port != NULL) diff --git a/crypto/bn/bn_blind.c b/crypto/bn/bn_blind.c index 35be32b99a..c247f71c8a 100644 --- a/crypto/bn/bn_blind.c +++ b/crypto/bn/bn_blind.c @@ -90,6 +90,9 @@ err: void BN_BLINDING_free(r) BN_BLINDING *r; { + if(r == NULL) + return; + if (r->A != NULL) BN_free(r->A ); if (r->Ai != NULL) BN_free(r->Ai); Free(r); diff --git a/crypto/bn/bn_lib.c b/crypto/bn/bn_lib.c index c027d0b03e..d8d2c3297d 100644 --- a/crypto/bn/bn_lib.c +++ b/crypto/bn/bn_lib.c @@ -341,6 +341,9 @@ BN_CTX *c; { int i; + if(c == NULL) + return; + for (i=0; ibn[i])); if (c->flags & BN_FLG_MALLOCED) diff --git a/crypto/bn/bn_mont.c b/crypto/bn/bn_mont.c index a5640b5a3b..2215dc3589 100644 --- a/crypto/bn/bn_mont.c +++ b/crypto/bn/bn_mont.c @@ -289,6 +289,9 @@ BN_MONT_CTX *ctx; void BN_MONT_CTX_free(mont) BN_MONT_CTX *mont; { + if(mont == NULL) + return; + BN_free(&(mont->RR)); BN_free(&(mont->N)); BN_free(&(mont->Ni)); diff --git a/crypto/bn/bn_recp.c b/crypto/bn/bn_recp.c index 97ca857ed1..3ace566b55 100644 --- a/crypto/bn/bn_recp.c +++ b/crypto/bn/bn_recp.c @@ -84,6 +84,9 @@ BN_RECP_CTX *BN_RECP_CTX_new() void BN_RECP_CTX_free(recp) BN_RECP_CTX *recp; { + if(recp == NULL) + return; + BN_free(&(recp->N)); BN_free(&(recp->Nr)); if (recp->flags & BN_FLG_MALLOCED) diff --git a/crypto/buffer/buffer.c b/crypto/buffer/buffer.c index 7e8af9e2fa..b160a74a47 100644 --- a/crypto/buffer/buffer.c +++ b/crypto/buffer/buffer.c @@ -79,6 +79,9 @@ BUF_MEM *BUF_MEM_new() void BUF_MEM_free(a) BUF_MEM *a; { + if(a == NULL) + return; + if (a->data != NULL) { memset(a->data,0,(unsigned int)a->max); diff --git a/crypto/comp/comp_lib.c b/crypto/comp/comp_lib.c index 8ce06951af..dcacb5557d 100644 --- a/crypto/comp/comp_lib.c +++ b/crypto/comp/comp_lib.c @@ -33,6 +33,9 @@ COMP_CTX *ctx; { /* CRYPTO_free_ex_data(rsa_meth,(char *)ctx,&ctx->ex_data); */ + 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 5cf621855a..39c997aef8 100644 --- a/crypto/err/err.c +++ b/crypto/err/err.c @@ -175,6 +175,9 @@ ERR_STATE *s; { int i; + if(s == NULL) + return; + for (i=0; iindex != NULL) { for (i=db->num_fields-1; i>=0; i--) diff --git a/crypto/x509/x509_lu.c b/crypto/x509/x509_lu.c index deec5adae5..8ea68198fc 100644 --- a/crypto/x509/x509_lu.c +++ b/crypto/x509/x509_lu.c @@ -259,6 +259,9 @@ X509_STORE *vfy; STACK *sk; X509_LOOKUP *lu; + if(vfy == NULL) + return; + sk=vfy->get_cert_methods; for (i=0; is2; if (s2->rbuf != NULL) Free(s2->rbuf); if (s2->wbuf != NULL) Free(s2->wbuf); diff --git a/ssl/s3_enc.c b/ssl/s3_enc.c index 116b096155..ea8e39ef06 100644 --- a/ssl/s3_enc.c +++ b/ssl/s3_enc.c @@ -208,6 +208,7 @@ int which; p=s->s3->tmp.key_block; i=EVP_MD_size(m); + // Should be j=exp?min(5,EVP_CIPHER_key_length(c)):EVP_CIPHER_key_length(c); ?? - Ben 30/12/98 j=(exp)?5:EVP_CIPHER_key_length(c); k=EVP_CIPHER_iv_length(c); if ( (which == SSL3_CHANGE_CIPHER_CLIENT_WRITE) || diff --git a/ssl/s3_lib.c b/ssl/s3_lib.c index a523207a9f..f15bb2438a 100644 --- a/ssl/s3_lib.c +++ b/ssl/s3_lib.c @@ -456,6 +456,9 @@ err: void ssl3_free(s) SSL *s; { + if(s == NULL) + return; + ssl3_cleanup_key_block(s); if (s->s3->rbuf.buf != NULL) Free(s->s3->rbuf.buf); diff --git a/ssl/ssl_cert.c b/ssl/ssl_cert.c index 1bff91eaa8..7d4531d808 100644 --- a/ssl/ssl_cert.c +++ b/ssl/ssl_cert.c @@ -105,6 +105,9 @@ CERT *c; { int i; + if(c == NULL) + return; + i=CRYPTO_add(&c->references,-1,CRYPTO_LOCK_SSL_CERT); #ifdef REF_PRINT REF_PRINT("CERT",c); diff --git a/ssl/ssl_comp.c b/ssl/ssl_comp.c index 7724ff5672..1593afb806 100644 --- a/ssl/ssl_comp.c +++ b/ssl/ssl_comp.c @@ -361,6 +361,9 @@ SSL_SESSION *ss; { int i; + if(ss == NULL) + return; + i=CRYPTO_add(&ss->references,-1,CRYPTO_LOCK_SSL_SESSION); #ifdef REF_PRINT REF_PRINT("SSL_SESSION",ss); diff --git a/ssl/ssl_lib.c b/ssl/ssl_lib.c index e56233075e..9e578fd738 100644 --- a/ssl/ssl_lib.c +++ b/ssl/ssl_lib.c @@ -203,6 +203,9 @@ SSL *s; { int i; + if(s == NULL) + return; + i=CRYPTO_add(&s->references,-1,CRYPTO_LOCK_SSL); #ifdef REF_PRINT REF_PRINT("SSL",s); diff --git a/ssl/ssl_sess.c b/ssl/ssl_sess.c index d4978a7d50..95cd7fed8a 100644 --- a/ssl/ssl_sess.c +++ b/ssl/ssl_sess.c @@ -363,6 +363,9 @@ SSL_SESSION *ss; { int i; + if(ss == NULL) + return; + i=CRYPTO_add(&ss->references,-1,CRYPTO_LOCK_SSL_SESSION); #ifdef REF_PRINT REF_PRINT("SSL_SESSION",ss);