Fix a double free in ca command line
[openssl.git] / apps / gendsa.c
index 4c05493bfa5d92be32e3737294501818169b6832..c9563a74f7e50741d212035120a560ea70c8ce00 100644 (file)
@@ -29,7 +29,7 @@ typedef enum OPTION_choice {
     OPT_OUT, OPT_PASSOUT, OPT_ENGINE, OPT_RAND, OPT_CIPHER
 } OPTION_CHOICE;
 
-OPTIONS gendsa_options[] = {
+const OPTIONS gendsa_options[] = {
     {OPT_HELP_STR, 1, '-', "Usage: %s [args] dsaparam-file\n"},
     {OPT_HELP_STR, 1, '-', "Valid options are:\n"},
     {"help", OPT_HELP, '-', "Display this summary"},
@@ -46,6 +46,7 @@ OPTIONS gendsa_options[] = {
 
 int gendsa_main(int argc, char **argv)
 {
+    ENGINE *e = NULL;
     BIO *out = NULL, *in = NULL;
     DSA *dsa = NULL;
     const EVP_CIPHER *enc = NULL;
@@ -74,7 +75,7 @@ int gendsa_main(int argc, char **argv)
             passoutarg = opt_arg();
             break;
         case OPT_ENGINE:
-            (void)setup_engine(opt_arg(), 0);
+            e = setup_engine(opt_arg(), 0);
             break;
         case OPT_RAND:
             inrand = opt_arg();
@@ -139,6 +140,7 @@ int gendsa_main(int argc, char **argv)
     BIO_free(in);
     BIO_free_all(out);
     DSA_free(dsa);
+    release_engine(e);
     OPENSSL_free(passout);
     return (ret);
 }