Rewrite remaining strcat() calls in curses interface.
authorDavid Griffith <dave@661.org>
Sun, 3 Feb 2019 12:55:25 +0000 (04:55 -0800)
committerDavid Griffith <dave@661.org>
Sun, 3 Feb 2019 12:55:25 +0000 (04:55 -0800)
src/curses/ux_input.c

index ce616904a93965b63f2b4986e7fecf0a2f2801f8..c6876ab596d2f6022e449424f1d6c095be1fe02a 100644 (file)
@@ -736,6 +736,7 @@ int os_read_file_name (char *file_name, const char *default_name, int flag)
     int i;
     char *tempname;
     zchar answer[4];
+    char path_separator[2];
 
     /* Turn off playback and recording temporarily */
     istream_replay = 0;
@@ -785,6 +786,9 @@ int os_read_file_name (char *file_name, const char *default_name, int flag)
      * someone tries it.
      */
     if (f_setup.restricted_path != NULL) {
+       path_separator[0] = PATH_SEPARATOR;
+       path_separator[1] = 0;
+
        for (i = strlen(file_name); i > 0; i--) {
            if (file_name[i] == PATH_SEPARATOR) {
                i++;
@@ -793,10 +797,12 @@ int os_read_file_name (char *file_name, const char *default_name, int flag)
        }
        tempname = strdup(file_name + i);
        strcpy(file_name, f_setup.restricted_path);
+
+       /* Make sure the final character is the path separator. */
        if (file_name[strlen(file_name)-1] != PATH_SEPARATOR) {
-           strcat(file_name, "/");
+           strncat(file_name, path_separator, strlen(file_name) - 2);
        }
-       strcat(file_name, tempname);
+       strncat(file_name, tempname, strlen(file_name) - strlen(tempname) - 1);
     }
 
     /* Warn if overwriting a file. */