Commit 31b222da authored by Rich Salz's avatar Rich Salz
Browse files

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: default avatarRichard Levitte <levitte@openssl.org>
parent a4d5269e
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -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);
}
+11 −1
Original line number Diff line number Diff line
@@ -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