util/grub-mkrescue: Check existence of option arguments

As reported by Victoriia Egorova in bug 65880, grub-mkrescue does not
verify that the expected argument of an option like -d or -k does really
exist in argv. So, check the loop counter before incrementing it inside
the loop which copies argv to argp_argv. Issue an error message similar
to what older versions of grub-mkrescue did with a missing argument,
e.g. 2.02.

Fixes: https://savannah.gnu.org/bugs/index.php?65880

Signed-off-by: Thomas Schmitt <scdbackup@gmx.net>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
This commit is contained in:
Thomas Schmitt 2024-06-17 21:03:00 +02:00 committed by Daniel Kiper
parent ab9fe80300
commit b53ec06a1d

View File

@ -477,6 +477,8 @@ main (int argc, char *argv[])
for (i = 1; i < argc; i++) for (i = 1; i < argc; i++)
{ {
if (strcmp (argv[i], "-output") == 0) { if (strcmp (argv[i], "-output") == 0) {
if (i + 1 >= argc)
grub_util_error ("%s -- '%s'", _("option requires an argument"), argv[i]);
argp_argv[argp_argc++] = (char *) "--output"; argp_argv[argp_argc++] = (char *) "--output";
i++; i++;
argp_argv[argp_argc++] = argv[i]; argp_argv[argp_argc++] = argv[i];
@ -485,6 +487,8 @@ main (int argc, char *argv[])
switch (args_to_eat (argv[i])) switch (args_to_eat (argv[i]))
{ {
case 2: case 2:
if (i + 1 >= argc)
grub_util_error ("%s -- '%s'", _("option requires an argument"), argv[i]);
argp_argv[argp_argc++] = argv[i++]; argp_argv[argp_argc++] = argv[i++];
/* Fallthrough */ /* Fallthrough */
case 1: case 1: