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