mirror of https://github.com/openssl/openssl.git
				
				
				
			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)
This commit is contained in:
		
							parent
							
								
									98c03302fb
								
							
						
					
					
						commit
						e6e9170d6e
					
				|  | @ -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); | ||||
|  |  | |||
|  | @ -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); | ||||
|  |  | |||
|  | @ -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); | ||||
|  |  | |||
|  | @ -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; | ||||
|  |  | |||
|  | @ -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); | ||||
| } | ||||
|  |  | |||
|  | @ -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); | ||||
| } | ||||
|  |  | |||
|  | @ -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); | ||||
|  |  | |||
|  | @ -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); | ||||
| 
 | ||||
|  |  | |||
|  | @ -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[i] = NULL; \ | ||||
|             } \ | ||||
|         (p)->err_data_flags[i]=0; \ | ||||
|         } while(0) | ||||
|             (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); | ||||
|     } | ||||
|  |  | |||
|  | @ -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]); | ||||
|  |  | |||
|  | @ -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) | ||||
|  |  | |||
|  | @ -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); | ||||
|  |  | |||
|  | @ -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) | ||||
|  |  | |||
|  | @ -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) | ||||
|  |  | |||
|  | @ -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) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue