[PATCH 1/2] sim: run: fix crash in argc==0 error situation

Mike Frysinger vapier@gentoo.org
Mon Nov 15 08:37:05 GMT 2021


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.
---
 sim/common/sim-options.c | 24 +++++++++++++++++-------
 1 file changed, 17 insertions(+), 7 deletions(-)

diff --git a/sim/common/sim-options.c b/sim/common/sim-options.c
index ee7d11fb6925..17e550e55577 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;
 	}
-- 
2.33.0



More information about the Gdb-patches mailing list