CRYPTO_mem_leaks should ignore it's BIO argument.
CRYPTO_mem_leaks takes a BIO* argument. It's not a leak if that argument hasn't been free'd. Reviewed-by: Richard Levitte <levitte@openssl.org>
This commit is contained in:
parent
a4d5269e6d
commit
31b222da1e
@ -527,8 +527,7 @@ int main(int argc, char *argv[])
|
||||
BIO_free(bio_in);
|
||||
BIO_free_all(bio_out);
|
||||
apps_shutdown();
|
||||
/*CRYPTO_mem_leaks(bio_err);
|
||||
*/
|
||||
CRYPTO_mem_leaks(bio_err);
|
||||
BIO_free(bio_err);
|
||||
return (ret);
|
||||
}
|
||||
|
@ -623,6 +623,7 @@ void CRYPTO_dbg_realloc(void *addr1, void *addr2, int num,
|
||||
typedef struct mem_leak_st {
|
||||
BIO *bio;
|
||||
int chunks;
|
||||
int seen;
|
||||
long bytes;
|
||||
} MEM_LEAK;
|
||||
|
||||
@ -637,8 +638,11 @@ static void print_leak_doall_arg(const MEM *m, MEM_LEAK *l)
|
||||
|
||||
#define BUF_REMAIN (sizeof buf - (size_t)(bufp - buf))
|
||||
|
||||
if (m->addr == (char *)l->bio)
|
||||
/* Is one "leak" the BIO we were given? */
|
||||
if (m->addr == (char *)l->bio) {
|
||||
l->seen = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
if (options & V_CRYPTO_MDEBUG_TIME) {
|
||||
lcl = localtime(&m->time);
|
||||
@ -722,8 +726,14 @@ void CRYPTO_mem_leaks(BIO *b)
|
||||
ml.bio = b;
|
||||
ml.bytes = 0;
|
||||
ml.chunks = 0;
|
||||
ml.seen = 0;
|
||||
if (mh != NULL)
|
||||
lh_MEM_doall_arg(mh, LHASH_DOALL_ARG_FN(print_leak), MEM_LEAK, &ml);
|
||||
/* Don't count the BIO that was passed in as a "leak" */
|
||||
if (ml.seen && ml.chunks >= 1 && ml.bytes >= (int)sizeof (*b)) {
|
||||
ml.chunks--;
|
||||
ml.bytes -= (int)sizeof (*b);
|
||||
}
|
||||
if (ml.chunks != 0) {
|
||||
BIO_printf(b, "%ld bytes leaked in %d chunks\n", ml.bytes, ml.chunks);
|
||||
#ifdef CRYPTO_MDEBUG_ABORT
|
||||
|
Loading…
x
Reference in New Issue
Block a user