sim: run: fix crash in argc==0 error situation

The new argv processing code assumed that we were always passed a
command line.  If we weren't, make sure we don't crash before we
get a chance to output an error message about incorrect usage.
This commit is contained in:
Mike Frysinger
2021-11-15 03:32:26 -05:00
parent 145a603abc
commit 7770da9714

View File

@ -615,16 +615,26 @@ sim_parse_args (SIM_DESC sd, char * const *argv)
{ {
if (STATE_OPEN_KIND (sd) == SIM_OPEN_STANDALONE) if (STATE_OPEN_KIND (sd) == SIM_OPEN_STANDALONE)
{ {
char **new_argv = dupargv (argv + optind); char **new_argv;
STATE_PROG_FILE (sd) = xstrdup (argv[optind]); free (STATE_PROG_FILE (sd));
if (STATE_PROG_ARGV0 (sd) != NULL) STATE_PROG_FILE (sd) = NULL;
{
free (new_argv[0]); new_argv = dupargv (argv + optind);
new_argv[0] = xstrdup (STATE_PROG_ARGV0 (sd));
}
freeargv (STATE_PROG_ARGV (sd)); freeargv (STATE_PROG_ARGV (sd));
STATE_PROG_ARGV (sd) = new_argv; STATE_PROG_ARGV (sd) = new_argv;
/* Skip steps when argc == 0. */
if (argv[optind] != NULL)
{
STATE_PROG_FILE (sd) = xstrdup (argv[optind]);
if (STATE_PROG_ARGV0 (sd) != NULL)
{
free (new_argv[0]);
new_argv[0] = xstrdup (STATE_PROG_ARGV0 (sd));
}
}
} }
break; break;
} }