changeset 18133:3e2f202d2981 draft

(svn r22958) -Fix [FS#4778]: the savegame description and loading of savegames would crash with savegames from a patched stable (which didn't bump the savegame version)
author rubidium <rubidium@openttd.org>
date Fri, 23 Sep 2011 19:49:45 +0000
parents 306c5fc49ed1
children 1ea8781b002d
files src/saveload/company_sl.cpp src/saveload/town_sl.cpp
diffstat 2 files changed, 12 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/saveload/company_sl.cpp
+++ b/src/saveload/company_sl.cpp
@@ -349,8 +349,7 @@
 		SaveLoad_PLYR_common(NULL, cprops);
 
 		/* We do not load old custom names */
-		if (IsSavegameVersionBefore(84))
-		{
+		if (IsSavegameVersionBefore(84)) {
 			if (GB(cprops->name_1, 11, 5) == 15) {
 				cprops->name_1 = STR_GAME_SAVELOAD_NOT_AVAILABLE;
 			}
@@ -360,6 +359,13 @@
 			}
 		}
 
+		if (cprops->name == NULL && !IsInsideMM(cprops->name_1, SPECSTR_COMPANY_NAME_START, SPECSTR_COMPANY_NAME_LAST + 1) &&
+				cprops->name_1 != STR_GAME_SAVELOAD_NOT_AVAILABLE && cprops->name_1 != STR_SV_UNNAMED &&
+				cprops->name_1 != SPECSTR_ANDCO_NAME && cprops->name_1 != SPECSTR_PRESIDENT_NAME &&
+				cprops->name_1 != SPECSTR_SILLY_NAME) {
+			cprops->name_1 = STR_GAME_SAVELOAD_NOT_AVAILABLE;
+		}
+
 		if (!_load_check_data.companies.Insert(index, cprops)) delete cprops;
 	}
 }
--- a/src/saveload/town_sl.cpp
+++ b/src/saveload/town_sl.cpp
@@ -205,6 +205,10 @@
 	while ((index = SlIterateArray()) != -1) {
 		Town *t = new (index) Town();
 		SlObject(t, _town_desc);
+
+		if (t->townnamegrfid == 0 && !IsInsideMM(t->townnametype, SPECSTR_TOWNNAME_START, SPECSTR_TOWNNAME_LAST)) {
+			SlErrorCorrupt("Invalid town name generator");
+		}
 	}
 }