fix memory leak
[openssl.git] / apps / openssl.c
index 6a942078482e68896b53311e34e1748be001ca8b..58f8bb73a10fed6c9401de7a10cb42eaee3ae8f7 100644 (file)
@@ -138,7 +138,7 @@ static unsigned long MS_CALLBACK hash(const void *a_void);
 static int MS_CALLBACK cmp(const void *a_void,const void *b_void);
 static LHASH *prog_init(void );
 static int do_cmd(LHASH *prog,int argc,char *argv[]);
-LHASH *config=NULL;
+CONF *config=NULL;
 char *default_config_file=NULL;
 
 /* Make sure there is only one when MONOLITH is defined */
@@ -227,12 +227,17 @@ int main(int Argc, char *Argv[])
        arg.data=NULL;
        arg.count=0;
 
-       if (getenv("OPENSSL_DEBUG_MEMORY") != NULL)
+       if (getenv("OPENSSL_DEBUG_MEMORY") != NULL) /* if not defined, use compiled-in library defaults */
                {
                if (!(0 == strcmp(getenv("OPENSSL_DEBUG_MEMORY"), "off")))
                        {
                        CRYPTO_malloc_debug_init();
-                       CRYPTO_dbg_set_options(V_CRYPTO_MDEBUG_ALL);
+                       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);
@@ -269,8 +274,9 @@ int main(int Argc, char *Argv[])
 
        default_config_file=p;
 
-       config=CONF_load(config,p,&errline);
-       if (config == NULL) ERR_clear_error();
+       config=NCONF_new(NULL);
+       i=NCONF_load(config,p,&errline);
+       if (i == 0) ERR_clear_error();
 
        prog=prog_init();
 
@@ -339,7 +345,7 @@ int main(int Argc, char *Argv[])
 end:
        if (config != NULL)
                {
-               CONF_free(config);
+               NCONF_free(config);
                config=NULL;
                }
        if (prog != NULL) lh_free(prog);
@@ -347,9 +353,11 @@ end:
        ERR_remove_state(0);
 
        EVP_cleanup();
+        ENGINE_cleanup();
+       
        ERR_free_strings();
        
-        ENGINE_cleanup();
+       apps_shutdown();
 
        CRYPTO_mem_leaks(bio_err);
        if (bio_err != NULL)