(svn r3496) - Validate filename titles before they get displayed. This avoids crashes with UTF-8 encoded or bad filenames by replacing undisplayable characters with a '?'
authorpeter1138
Tue, 31 Jan 2006 12:08:49 +0000
changeset 2940 ce57a148333e
parent 2939 e598b646985d
child 2941 23aa0ef3cd70
(svn r3496) - Validate filename titles before they get displayed. This avoids crashes with UTF-8 encoded or bad filenames by replacing undisplayable characters with a '?'
os2.c
unix.c
win32.c
--- a/os2.c	Tue Jan 31 06:53:32 2006 +0000
+++ b/os2.c	Tue Jan 31 12:08:49 2006 +0000
@@ -109,6 +109,7 @@
 				fios->mtime = 0;
 				ttd_strlcpy(fios->name, dirent->d_name, lengthof(fios->name));
 				snprintf(fios->title, lengthof(fios->title), "%s\\ (Directory)", dirent->d_name);
+				str_validate(fios->title);
 			}
 		}
 		closedir(dir);
@@ -150,6 +151,7 @@
 
 				*t = '\0'; // strip extension
 				ttd_strlcpy(fios->title, dirent->d_name, lengthof(fios->title));
+				str_validate(fios->title);
 			} else if (mode == SLD_LOAD_GAME || mode == SLD_LOAD_SCENARIO) {
 				if (strcasecmp(t, ".ss1") == 0 ||
 						strcasecmp(t, ".sv1") == 0 ||
@@ -236,6 +238,7 @@
 				fios->mtime = 0;
 				ttd_strlcpy(fios->name, dirent->d_name, lengthof(fios->name));
 				snprintf(fios->title, lengthof(fios->title), "%s\\ (Directory)", dirent->d_name);
+				str_validate(fios->title);
 			}
 		}
 		closedir(dir);
@@ -276,6 +279,7 @@
 
 				*t = '\0'; // strip extension
 				ttd_strlcpy(fios->title, dirent->d_name, lengthof(fios->title));
+				str_validate(fios->title);
 			} else if (mode == SLD_LOAD_GAME || mode == SLD_LOAD_SCENARIO ||
 					mode == SLD_NEW_GAME) {
 				if (strcasecmp(t, ".sv0") == 0 ||
--- a/unix.c	Tue Jan 31 06:53:32 2006 +0000
+++ b/unix.c	Tue Jan 31 12:08:49 2006 +0000
@@ -121,6 +121,7 @@
 				ttd_strlcpy(fios->name, dirent->d_name, lengthof(fios->name));
 				snprintf(fios->title, lengthof(fios->title),
 					"%s/ (Directory)", dirent->d_name);
+				str_validate(fios->title);
 			}
 		}
 		closedir(dir);
@@ -163,6 +164,7 @@
 
 				*t = '\0'; // strip extension
 				ttd_strlcpy(fios->title, dirent->d_name, lengthof(fios->title));
+				str_validate(fios->title);
 			} else if (mode == SLD_LOAD_GAME || mode == SLD_LOAD_SCENARIO) {
 				if (strcasecmp(t, ".ss1") == 0 ||
 						strcasecmp(t, ".sv1") == 0 ||
@@ -222,6 +224,7 @@
 				fios->mtime = 0;
 				ttd_strlcpy(fios->name, dirent->d_name, lengthof(fios->name));
 				snprintf(fios->title, lengthof(fios->title), "%s/ (Directory)", dirent->d_name);
+				str_validate(fios->title);
 			}
 		}
 		closedir(dir);
@@ -262,6 +265,7 @@
 
 				*t = '\0'; // strip extension
 				ttd_strlcpy(fios->title, dirent->d_name, lengthof(fios->title));
+				str_validate(fios->title);
 			} else if (mode == SLD_LOAD_GAME || mode == SLD_LOAD_SCENARIO ||
 					mode == SLD_NEW_GAME) {
 				if (strcasecmp(t, ".sv0") == 0 ||
--- a/win32.c	Tue Jan 31 06:53:32 2006 +0000
+++ b/win32.c	Tue Jan 31 12:08:49 2006 +0000
@@ -686,6 +686,7 @@
 				fios->mtime = 0;
 				ttd_strlcpy(fios->name, fd.cFileName, lengthof(fios->name));
 				snprintf(fios->title, lengthof(fios->title), "%s\\ (Directory)", fd.cFileName);
+				str_validate(fios->title);
 			}
 		} while (FindNextFile(h, &fd));
 		FindClose(h);
@@ -726,6 +727,7 @@
 
 				*t = '\0'; // strip extension
 				ttd_strlcpy(fios->title, fd.cFileName, lengthof(fios->title));
+				str_validate(fios->title);
 			} else if (mode == SLD_LOAD_GAME || mode == SLD_LOAD_SCENARIO) {
 				if (strcasecmp(t, ".ss1") == 0 ||
 						strcasecmp(t, ".sv1") == 0 ||
@@ -800,6 +802,7 @@
 				fios->mtime = 0;
 				ttd_strlcpy(fios->name, fd.cFileName, lengthof(fios->name));
 				snprintf(fios->title, lengthof(fios->title), "%s\\ (Directory)", fd.cFileName);
+				str_validate(fios->title);
 			}
 		} while (FindNextFile(h, &fd));
 		FindClose(h);
@@ -839,6 +842,7 @@
 
 				*t = '\0'; // strip extension
 				ttd_strlcpy(fios->title, fd.cFileName, lengthof(fios->title));
+				str_validate(fios->title);
 			} else if (mode == SLD_LOAD_GAME || mode == SLD_LOAD_SCENARIO ||
 					mode == SLD_NEW_GAME) {
 				if (strcasecmp(t, ".sv0") == 0 ||