diff options
author | Bodo Möller <bodo@openssl.org> | 2002-03-25 23:18:11 +0000 |
---|---|---|
committer | Bodo Möller <bodo@openssl.org> | 2002-03-25 23:18:11 +0000 |
commit | e8e7fbdb16b9d01f5a173eab9d1b9ec37c7ff51e (patch) | |
tree | c79012148c40677cd2098db0b5d2a0b1d3c392d1 /crypto/engine/enginetest.c | |
parent | d5c21afd4b0bcdb5da85bca74e6ea3e9ca00ac47 (diff) |
fix memory leak
Submitted by: Nils Larsch
Diffstat (limited to 'crypto/engine/enginetest.c')
-rw-r--r-- | crypto/engine/enginetest.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/crypto/engine/enginetest.c b/crypto/engine/enginetest.c index 598cb31a6f..87fa8c57b7 100644 --- a/crypto/engine/enginetest.c +++ b/crypto/engine/enginetest.c @@ -79,6 +79,9 @@ static void display_engine_list() h = ENGINE_get_next(h); } printf("end of list\n"); + /* ENGINE_get_first() increases the struct_ref counter, so we + must call ENGINE_free() to decrease it again */ + ENGINE_free(h); } int main(int argc, char *argv[]) @@ -94,6 +97,18 @@ int main(int argc, char *argv[]) ENGINE *new_h3 = NULL; ENGINE *new_h4 = NULL; + /* enable memory leak checking unless explicitly disabled */ + if (!((getenv("OPENSSL_DEBUG_MEMORY") != NULL) && (0 == strcmp(getenv("OPENSSL_DEBUG_MEMORY"), "off")))) + { + CRYPTO_malloc_debug_init(); + CRYPTO_set_mem_debug_options(V_CRYPTO_MDEBUG_ALL); + } + else + { + /* OPENSSL_DEBUG_MEMORY=off */ + CRYPTO_set_mem_debug_functions(0, 0, 0, 0, 0); + } + CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON); ERR_load_crypto_strings(); memset(block, 0, 512 * sizeof(ENGINE *)); @@ -127,6 +142,8 @@ int main(int argc, char *argv[]) printf("Remove failed!\n"); goto end; } + if (ptr) + ENGINE_free(ptr); display_engine_list(); if(!ENGINE_add(new_h3) || !ENGINE_add(new_h2)) { @@ -181,6 +198,8 @@ int main(int argc, char *argv[]) if(!ENGINE_remove(ptr)) printf("Remove failed!i - probably no hardware " "support present.\n"); + if (ptr) + ENGINE_free(ptr); display_engine_list(); if(!ENGINE_add(new_h1) || !ENGINE_remove(new_h1)) { @@ -226,6 +245,7 @@ cleanup_loop: printf("\nRemove failed!\n"); goto end; } + ENGINE_free(ptr); printf("."); fflush(stdout); } for(loop = 0; loop < 512; loop++) @@ -245,5 +265,10 @@ end: for(loop = 0; loop < 512; loop++) if(block[loop]) ENGINE_free(block[loop]); + ENGINE_cleanup(); + CRYPTO_cleanup_all_ex_data(); + ERR_free_strings(); + ERR_remove_state(0); + CRYPTO_mem_leaks_fp(stderr); return to_return; } |