From c27363f566274a65067d7559f9669f300f957183 Mon Sep 17 00:00:00 2001 From: Rich Salz Date: Sun, 20 Aug 2017 17:10:48 -0400 Subject: [PATCH] Check # of arguments for remaining commands. Reviewed-by: Paul Dale (Merged from https://github.com/openssl/openssl/pull/4201) --- apps/enc.c | 4 ++++ apps/genrsa.c | 12 +++++++++--- apps/openssl.c | 11 +++++++---- apps/prime.c | 10 ++++++++-- apps/rand.c | 8 ++++++-- apps/srp.c | 21 +++++++++------------ apps/version.c | 5 +++++ 7 files changed, 48 insertions(+), 23 deletions(-) diff --git a/apps/enc.c b/apps/enc.c index db5d3a2991..9c85ee58b6 100644 --- a/apps/enc.c +++ b/apps/enc.c @@ -263,6 +263,10 @@ int enc_main(int argc, char **argv) break; } } + if (opt_num_rest() != 0) { + BIO_printf(bio_err, "Extra arguments given.\n"); + goto opthelp; + } if (cipher && EVP_CIPHER_flags(cipher) & EVP_CIPH_FLAG_AEAD_CIPHER) { BIO_printf(bio_err, "%s: AEAD ciphers not supported\n", prog); diff --git a/apps/genrsa.c b/apps/genrsa.c index 2bc70a9063..ebd69e15ed 100644 --- a/apps/genrsa.c +++ b/apps/genrsa.c @@ -78,6 +78,7 @@ int genrsa_main(int argc, char **argv) switch (o) { case OPT_EOF: case OPT_ERR: +opthelp: BIO_printf(bio_err, "%s: Use -help for summary.\n", prog); goto end; case OPT_HELP: @@ -111,11 +112,16 @@ int genrsa_main(int argc, char **argv) } argc = opt_num_rest(); argv = opt_rest(); - private = 1; - if (argv[0] && (!opt_int(argv[0], &num) || num <= 0)) - goto end; + if (argc == 1) { + if (!opt_int(argv[0], &num) || num <= 0) + goto end; + } else if (argc > 0) { + BIO_printf(bio_err, "Extra arguments given.\n"); + goto opthelp; + } + private = 1; if (!app_passwd(NULL, passoutarg, NULL, &passout)) { BIO_printf(bio_err, "Error getting password\n"); goto end; diff --git a/apps/openssl.c b/apps/openssl.c index 2b43b1bd7b..8a67328cac 100644 --- a/apps/openssl.c +++ b/apps/openssl.c @@ -388,6 +388,7 @@ int list_main(int argc, char **argv) switch (o) { case OPT_EOF: /* Never hit, but suppresses warning */ case OPT_ERR: +opthelp: BIO_printf(bio_err, "%s: Use -help for summary.\n", prog); return 1; case OPT_HELP: @@ -429,12 +430,14 @@ int list_main(int argc, char **argv) } done = 1; } - - if (!done) { - BIO_printf(bio_err, "%s: Use -help for summary.\n", prog); - return 1; + if (opt_num_rest() != 0) { + BIO_printf(bio_err, "Extra arguments given.\n"); + goto opthelp; } + if (!done) + goto opthelp; + return 0; } diff --git a/apps/prime.c b/apps/prime.c index 3c72330c0a..9aa32d02b0 100644 --- a/apps/prime.c +++ b/apps/prime.c @@ -43,6 +43,7 @@ int prime_main(int argc, char **argv) switch (o) { case OPT_EOF: case OPT_ERR: +opthelp: BIO_printf(bio_err, "%s: Use -help for summary.\n", prog); goto end; case OPT_HELP: @@ -69,9 +70,14 @@ int prime_main(int argc, char **argv) argc = opt_num_rest(); argv = opt_rest(); - if (argc == 0 && !generate) { + if (generate) { + if (argc != 0) { + BIO_printf(bio_err, "Extra arguments given.\n"); + goto opthelp; + } + } else if (argc == 0) { BIO_printf(bio_err, "%s: No prime specified\n", prog); - goto end; + goto opthelp; } if (generate) { diff --git a/apps/rand.c b/apps/rand.c index 34550065c0..cf45b43b2c 100644 --- a/apps/rand.c +++ b/apps/rand.c @@ -77,9 +77,13 @@ int rand_main(int argc, char **argv) } argc = opt_num_rest(); argv = opt_rest(); - - if (argc != 1 || !opt_int(argv[0], &num) || num < 0) + if (argc == 1) { + if (!opt_int(argv[0], &num) || num <= 0) + goto end; + } else if (argc > 0) { + BIO_printf(bio_err, "Extra arguments given.\n"); goto opthelp; + } out = bio_open_default(outfile, 'w', format); if (out == NULL) diff --git a/apps/srp.c b/apps/srp.c index c5002188a5..ceb0640c2f 100644 --- a/apps/srp.c +++ b/apps/srp.c @@ -297,11 +297,12 @@ int srp_main(int argc, char **argv) "Exactly one of the options -add, -delete, -modify -list must be specified.\n"); goto opthelp; } - if ((mode == OPT_DELETE || mode == OPT_MODIFY || mode == OPT_ADD) - && argc < 1) { - BIO_printf(bio_err, - "Need at least one user for options -add, -delete, -modify. \n"); - goto opthelp; + if (mode == OPT_DELETE || mode == OPT_MODIFY || mode == OPT_ADD) { + if (argc == 0) { + BIO_printf(bio_err, "Need at least one user.\n"); + goto opthelp; + } + user = *argv++; } if ((passinarg != NULL || passoutarg != NULL) && argc != 1) { BIO_printf(bio_err, @@ -390,10 +391,7 @@ int srp_main(int argc, char **argv) if (verbose > 1) BIO_printf(bio_err, "Starting user processing\n"); - if (argc > 0) - user = *(argv++); - - while (mode == OPT_LIST || user) { + while (mode == OPT_LIST || user != NULL) { int userindex = -1; if (user != NULL && verbose > 1) @@ -554,9 +552,8 @@ int srp_main(int argc, char **argv) doupdatedb = 1; } } - if (--argc > 0) { - user = *(argv++); - } else { + user = *argv++; + if (user == NULL) { /* no more processing in any mode if no users left */ break; } diff --git a/apps/version.c b/apps/version.c index c9727daf52..57b9fd663f 100644 --- a/apps/version.c +++ b/apps/version.c @@ -72,6 +72,7 @@ int version_main(int argc, char **argv) switch (o) { case OPT_EOF: case OPT_ERR: +opthelp: BIO_printf(bio_err, "%s: Use -help for summary.\n", prog); goto end; case OPT_HELP: @@ -107,6 +108,10 @@ int version_main(int argc, char **argv) break; } } + if (opt_num_rest() != 0) { + BIO_printf(bio_err, "Extra parameters given.\n"); + goto opthelp; + } if (!dirty) version = 1; -- 2.25.1