Error out on too many command-line arguments
authorPeter Eisentraut <peter@eisentraut.org>
Thu, 29 Aug 2019 14:19:35 +0000 (16:19 +0200)
committerPeter Eisentraut <peter@eisentraut.org>
Thu, 29 Aug 2019 16:49:41 +0000 (18:49 +0200)
Fix up oid2name, pg_upgrade, and pgbench to error out on too many
command-line arguments.  This makes it match the behavior of other
PostgreSQL programs.

Author: Peter Eisentraut, Ibrar Ahmed
Discussion: https://www.postgresql.org/message-id/flat/f2554627-04e7-383a-ef01-ab99bb6a291c%402ndquadrant.com

contrib/oid2name/oid2name.c
src/bin/pg_upgrade/option.c
src/bin/pgbench/pgbench.c

index d3a4a50005b77a3b2e469a92952e4d0d0931f6f7..df4f9c062ffc4eb886dfd8191b68dd254270c05d 100644 (file)
@@ -185,6 +185,14 @@ get_opts(int argc, char **argv, struct options *my_opts)
                exit(1);
        }
    }
+
+   if (optind < argc)
+   {
+       fprintf(stderr, _("%s: too many command-line arguments (first is \"%s\")\n"),
+               progname, argv[optind]);
+       fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+       exit(1);
+   }
 }
 
 static void
index 8d66be085a4b25d71f39b7b2b608303e2ba4623a..28ff4c48ed39532234883dbcbb7d7dee1eb9ce25 100644 (file)
@@ -218,6 +218,9 @@ parseCommandLine(int argc, char *argv[])
        }
    }
 
+   if (optind < argc)
+       pg_fatal("too many command-line arguments (first is \"%s\")\n", argv[optind]);
+
    if ((log_opts.internal = fopen_priv(INTERNAL_LOG_FILE, "a")) == NULL)
        pg_fatal("could not open log file \"%s\": %m\n", INTERNAL_LOG_FILE);
 
index 570cf3306af2bc9efb4619afe860469a0fc9af4e..ed7652bfbf6358b44f96196ded99d0b0c6fefdb0 100644 (file)
@@ -5540,7 +5540,7 @@ main(int argc, char **argv)
    throttle_delay *= nthreads;
 
    if (argc > optind)
-       dbName = argv[optind];
+       dbName = argv[optind++];
    else
    {
        if ((env = getenv("PGDATABASE")) != NULL && *env != '\0')
@@ -5551,6 +5551,14 @@ main(int argc, char **argv)
            dbName = "";
    }
 
+   if (optind < argc)
+   {
+       fprintf(stderr, _("%s: too many command-line arguments (first is \"%s\")\n"),
+               progname, argv[optind]);
+       fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+       exit(1);
+   }
+
    if (is_init_mode)
    {
        if (benchmarking_option_set)