fixed potentially invalid string pointers when parsing options
authorHolger Schemel <info@artsoft.org>
Wed, 16 Sep 2020 13:21:51 +0000 (15:21 +0200)
committerHolger Schemel <info@artsoft.org>
Wed, 16 Sep 2020 13:21:51 +0000 (15:21 +0200)
When using command line options like "--option=argument" instead of
"--option argument" (which is especially needed if arguments are
optional), this resulted in invalid string pointers before this fix.

src/libgame/misc.c

index a02e19ecee48fad070d28cfaa904ece6d1a01757..79b1635ff12adccea7b570845ac5fb432128f664 100644 (file)
@@ -1002,8 +1002,8 @@ void GetOptions(int argc, char *argv[],
        Error(ERR_EXIT_HELP, "option '%s' requires an argument", option_str);
 
       // this should be extended to separate options for ro and rw data
-      options.ro_base_directory = ro_base_path = option_arg;
-      options.rw_base_directory = rw_base_path = option_arg;
+      options.ro_base_directory = ro_base_path = getStringCopy(option_arg);
+      options.rw_base_directory = rw_base_path = getStringCopy(option_arg);
       if (option_arg == next_option)
        options_left++;
 
@@ -1020,7 +1020,7 @@ void GetOptions(int argc, char *argv[],
       if (option_arg == NULL)
        Error(ERR_EXIT_HELP, "option '%s' requires an argument", option_str);
 
-      options.level_directory = option_arg;
+      options.level_directory = getStringCopy(option_arg);
       if (option_arg == next_option)
        options_left++;
     }
@@ -1029,7 +1029,7 @@ void GetOptions(int argc, char *argv[],
       if (option_arg == NULL)
        Error(ERR_EXIT_HELP, "option '%s' requires an argument", option_str);
 
-      options.graphics_directory = option_arg;
+      options.graphics_directory = getStringCopy(option_arg);
       if (option_arg == next_option)
        options_left++;
     }
@@ -1038,7 +1038,7 @@ void GetOptions(int argc, char *argv[],
       if (option_arg == NULL)
        Error(ERR_EXIT_HELP, "option '%s' requires an argument", option_str);
 
-      options.sounds_directory = option_arg;
+      options.sounds_directory = getStringCopy(option_arg);
       if (option_arg == next_option)
        options_left++;
     }
@@ -1047,7 +1047,7 @@ void GetOptions(int argc, char *argv[],
       if (option_arg == NULL)
        Error(ERR_EXIT_HELP, "option '%s' requires an argument", option_str);
 
-      options.music_directory = option_arg;
+      options.music_directory = getStringCopy(option_arg);
       if (option_arg == next_option)
        options_left++;
     }
@@ -1087,7 +1087,7 @@ void GetOptions(int argc, char *argv[],
       if (option_arg == NULL)
        Error(ERR_EXIT_HELP, "option '%s' requires an argument", option_str);
 
-      options.execute_command = option_arg;
+      options.execute_command = getStringCopy(option_arg);
       if (option_arg == next_option)
        options_left++;