summaryrefslogtreecommitdiffstats
path: root/crypto/bio/bio_lib.c
diff options
context:
space:
mode:
authorFdaSilvaYY <fdasilvayy@gmail.com>2016-04-28 20:13:44 +0200
committerFdaSilvaYY <fdasilvayy@gmail.com>2016-04-28 22:16:52 +0200
commita14a740dbecf112ed9de53fb90f34f2af871cda9 (patch)
tree22f9388a254a1c4487e6aa099afc358c21260d9f /crypto/bio/bio_lib.c
parent2bbf0baa9565cce937d85592f12d1279871dfaf6 (diff)
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)
Diffstat (limited to 'crypto/bio/bio_lib.c')
-rw-r--r--crypto/bio/bio_lib.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/crypto/bio/bio_lib.c b/crypto/bio/bio_lib.c
index 6ddc19fc9a..8f6848511e 100644
--- a/crypto/bio/bio_lib.c
+++ b/crypto/bio/bio_lib.c
@@ -98,6 +98,7 @@ int BIO_set(BIO *bio, const BIO_METHOD *method)
bio->lock = CRYPTO_THREAD_lock_new();
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);
return 0;
}
@@ -131,13 +132,13 @@ int BIO_free(BIO *a)
((i = (int)a->callback(a, BIO_CB_FREE, NULL, 0, 0L, 1L)) <= 0))
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_THREAD_lock_free(a->lock);
- if ((a->method != NULL) && (a->method->destroy != NULL))
- a->method->destroy(a);
-
OPENSSL_free(a);
return 1;