summaryrefslogtreecommitdiffstats
path: root/crypto/mem_dbg.c
diff options
context:
space:
mode:
authorDr. Stephen Henson <steve@openssl.org>2016-01-10 23:25:07 +0000
committerDr. Stephen Henson <steve@openssl.org>2016-01-11 02:41:16 +0000
commit4e482ae6ff62dd992354cad61dd3d81d55b6e204 (patch)
treec071069a6a3da8d4627329336b67cc62fd63015a /crypto/mem_dbg.c
parentc2e27310c790c0dd2f87dd420e65e0cca522ddb2 (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.c16
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