diff options
author | Dr. Stephen Henson <steve@openssl.org> | 2016-01-10 23:25:07 +0000 |
---|---|---|
committer | Dr. Stephen Henson <steve@openssl.org> | 2016-01-11 02:41:16 +0000 |
commit | 4e482ae6ff62dd992354cad61dd3d81d55b6e204 (patch) | |
tree | c071069a6a3da8d4627329336b67cc62fd63015a /crypto/mem_dbg.c | |
parent | c2e27310c790c0dd2f87dd420e65e0cca522ddb2 (diff) |
Add memory leak return value.
Make CRYPTO_mem_leaks() and CRYPTO_mem_leaks_fp() return a status value.
Update documentation. Don't abort() if there are leaks.
Reviewed-by: Viktor Dukhovni <viktor@openssl.org>
Diffstat (limited to 'crypto/mem_dbg.c')
-rw-r--r-- | crypto/mem_dbg.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/crypto/mem_dbg.c b/crypto/mem_dbg.c index 1e9dd83c14..6e93c8047e 100644 --- a/crypto/mem_dbg.c +++ b/crypto/mem_dbg.c @@ -643,12 +643,12 @@ static void print_leak_doall_arg(const MEM *m, MEM_LEAK *l) static IMPLEMENT_LHASH_DOALL_ARG_FN(print_leak, const MEM, MEM_LEAK) -void CRYPTO_mem_leaks(BIO *b) +int CRYPTO_mem_leaks(BIO *b) { MEM_LEAK ml; if (mh == NULL && amih == NULL) - return; + return 1; CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_DISABLE); @@ -665,7 +665,6 @@ void CRYPTO_mem_leaks(BIO *b) } if (ml.chunks != 0) { BIO_printf(b, "%ld bytes leaked in %d chunks\n", ml.bytes, ml.chunks); - abort(); } else { /* * Make sure that, if we found no leaks, memory-leak debugging itself @@ -697,15 +696,17 @@ void CRYPTO_mem_leaks(BIO *b) CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC); } CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ENABLE); + return ml.chunks == 0 ? 1 : 0; } # ifndef OPENSSL_NO_STDIO -void CRYPTO_mem_leaks_fp(FILE *fp) +int CRYPTO_mem_leaks_fp(FILE *fp) { BIO *b; + int ret; if (mh == NULL) - return; + return 0; /* * Need to turn off memory checking when allocated BIOs ... especially as * we're creating them at a time when we're trying to check we've not @@ -715,10 +716,11 @@ void CRYPTO_mem_leaks_fp(FILE *fp) b = BIO_new(BIO_s_file()); CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ENABLE); if (b == NULL) - return; + return -1; BIO_set_fp(b, fp, BIO_NOCLOSE); - CRYPTO_mem_leaks(b); + ret = CRYPTO_mem_leaks(b); BIO_free(b); + return ret; } # endif |