aboutsummaryrefslogtreecommitdiffstats
path: root/crypto/engine/enginetest.c
diff options
context:
space:
mode:
authorBodo Möller <bodo@openssl.org>2002-03-25 23:18:11 +0000
committerBodo Möller <bodo@openssl.org>2002-03-25 23:18:11 +0000
commite8e7fbdb16b9d01f5a173eab9d1b9ec37c7ff51e (patch)
treec79012148c40677cd2098db0b5d2a0b1d3c392d1 /crypto/engine/enginetest.c
parentd5c21afd4b0bcdb5da85bca74e6ea3e9ca00ac47 (diff)
downloadopenssl-e8e7fbdb16b9d01f5a173eab9d1b9ec37c7ff51e.tar.gz
fix memory leak
Submitted by: Nils Larsch
Diffstat (limited to 'crypto/engine/enginetest.c')
-rw-r--r--crypto/engine/enginetest.c25
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;
}