diff options
author | Mike Frysinger <vapier@gentoo.org> | 2021-11-15 03:32:26 -0500 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2021-11-15 03:32:26 -0500 |
commit | 7770da971420cd3327326b6b8720383d23b5dbd3 (patch) | |
tree | d27d8a7c92f3cbb05629357f6dee87db148c260b /sim | |
parent | 145a603abc767c2a1e6fe7755c10686353bbcc8f (diff) | |
download | fsf-binutils-gdb-7770da971420cd3327326b6b8720383d23b5dbd3.zip fsf-binutils-gdb-7770da971420cd3327326b6b8720383d23b5dbd3.tar.gz fsf-binutils-gdb-7770da971420cd3327326b6b8720383d23b5dbd3.tar.bz2 |
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.
Diffstat (limited to 'sim')
-rw-r--r-- | sim/common/sim-options.c | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/sim/common/sim-options.c b/sim/common/sim-options.c index ee7d11f..17e550e 100644 --- a/sim/common/sim-options.c +++ b/sim/common/sim-options.c @@ -615,16 +615,26 @@ sim_parse_args (SIM_DESC sd, char * const *argv) { if (STATE_OPEN_KIND (sd) == SIM_OPEN_STANDALONE) { - char **new_argv = dupargv (argv + optind); + char **new_argv; - 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)); - } + free (STATE_PROG_FILE (sd)); + STATE_PROG_FILE (sd) = NULL; + + new_argv = dupargv (argv + optind); freeargv (STATE_PROG_ARGV (sd)); 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; } |