diff options
author | Viktor Dukhovni <openssl-users@dukhovni.org> | 2016-03-06 20:01:20 -0500 |
---|---|---|
committer | Viktor Dukhovni <openssl-users@dukhovni.org> | 2016-03-07 18:54:16 -0500 |
commit | ebc4815fa56b64d711ada36899a35182a99cbbdb (patch) | |
tree | a1381721e8b027280aca153109c0df839daf2499 /apps | |
parent | e1d9f1ab39eeab0c3c2b9415e0aaaa8c05858f77 (diff) |
Don't free NCONF obtained values
Bug reported by Michel Sales.
Reviewed-by: Rich Salz <rsalz@openssl.org>
Diffstat (limited to 'apps')
-rw-r--r-- | apps/req.c | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/apps/req.c b/apps/req.c index 693acc22df..b128fa8c3e 100644 --- a/apps/req.c +++ b/apps/req.c @@ -198,7 +198,9 @@ int req_main(int argc, char **argv) char *extensions = NULL, *infile = NULL; char *outfile = NULL, *keyfile = NULL, *inrand = NULL; char *keyalgstr = NULL, *p, *prog, *passargin = NULL, *passargout = NULL; - char *passin = NULL, *passout = NULL, *req_exts = NULL, *subj = NULL; + char *passin = NULL, *passout = NULL; + char *nofree_passin = NULL, *nofree_passout = NULL; + char *req_exts = NULL, *subj = NULL; char *template = default_config_file, *keyout = NULL; const char *keyalg = NULL; OPTION_CHOICE o; @@ -436,15 +438,17 @@ int req_main(int argc, char **argv) } } - if (!passin) { - passin = NCONF_get_string(req_conf, SECTION, "input_password"); - if (!passin) + if (passin == NULL) { + passin = nofree_passin = + NCONF_get_string(req_conf, SECTION, "input_password"); + if (passin == NULL) ERR_clear_error(); } - if (!passout) { - passout = NCONF_get_string(req_conf, SECTION, "output_password"); - if (!passout) + if (passout == NULL) { + passout = nofree_passout = + NCONF_get_string(req_conf, SECTION, "output_password"); + if (passout == NULL) ERR_clear_error(); } @@ -862,8 +866,10 @@ int req_main(int argc, char **argv) X509_REQ_free(req); X509_free(x509ss); ASN1_INTEGER_free(serial); - OPENSSL_free(passin); - OPENSSL_free(passout); + if (passin != nofree_passin) + OPENSSL_free(passin); + if (passout != nofree_passout) + OPENSSL_free(passout); OBJ_cleanup(); return (ret); } |