mirror of https://github.com/openssl/openssl.git
				
				
				
			BIO_free should call method->destroy before free'ing member fields
Reviewed-by: Tim Hudson <tjh@openssl.org> Reviewed-by: Richard Levitte <levitte@openssl.org> (Merged from https://github.com/openssl/openssl/pull/1007)
This commit is contained in:
		
							parent
							
								
									2bbf0baa95
								
							
						
					
					
						commit
						a14a740dbe
					
				|  | @ -98,6 +98,7 @@ int BIO_set(BIO *bio, const BIO_METHOD *method) | ||||||
| 
 | 
 | ||||||
|     bio->lock = CRYPTO_THREAD_lock_new(); |     bio->lock = CRYPTO_THREAD_lock_new(); | ||||||
|     if (bio->lock == NULL) { |     if (bio->lock == NULL) { | ||||||
|  |         BIOerr(BIO_F_BIO_SET, ERR_R_MALLOC_FAILURE); | ||||||
|         CRYPTO_free_ex_data(CRYPTO_EX_INDEX_BIO, bio, &bio->ex_data); |         CRYPTO_free_ex_data(CRYPTO_EX_INDEX_BIO, bio, &bio->ex_data); | ||||||
|         return 0; |         return 0; | ||||||
|     } |     } | ||||||
|  | @ -131,13 +132,13 @@ int BIO_free(BIO *a) | ||||||
|         ((i = (int)a->callback(a, BIO_CB_FREE, NULL, 0, 0L, 1L)) <= 0)) |         ((i = (int)a->callback(a, BIO_CB_FREE, NULL, 0, 0L, 1L)) <= 0)) | ||||||
|         return i; |         return i; | ||||||
| 
 | 
 | ||||||
|  |     if ((a->method != NULL) && (a->method->destroy != NULL)) | ||||||
|  |         a->method->destroy(a); | ||||||
|  | 
 | ||||||
|     CRYPTO_free_ex_data(CRYPTO_EX_INDEX_BIO, a, &a->ex_data); |     CRYPTO_free_ex_data(CRYPTO_EX_INDEX_BIO, a, &a->ex_data); | ||||||
| 
 | 
 | ||||||
|     CRYPTO_THREAD_lock_free(a->lock); |     CRYPTO_THREAD_lock_free(a->lock); | ||||||
| 
 | 
 | ||||||
|     if ((a->method != NULL) && (a->method->destroy != NULL)) |  | ||||||
|         a->method->destroy(a); |  | ||||||
| 
 |  | ||||||
|     OPENSSL_free(a); |     OPENSSL_free(a); | ||||||
| 
 | 
 | ||||||
|     return 1; |     return 1; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue