diff options
author | rubidium <rubidium@openttd.org> | 2011-09-23 19:49:45 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2011-09-23 19:49:45 +0000 |
commit | 73a3708a9ecaea162cfb5e05176cdd7d37d056e9 (patch) | |
tree | 7e0b524ee0948935b5768a5bf2b9b4cf35b878b1 | |
parent | a6f9488ae4285b7904755d0913a6134a95d43c28 (diff) | |
download | openttd-73a3708a9ecaea162cfb5e05176cdd7d37d056e9.tar.xz |
(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)
-rw-r--r-- | src/saveload/company_sl.cpp | 10 | ||||
-rw-r--r-- | src/saveload/town_sl.cpp | 4 |
2 files changed, 12 insertions, 2 deletions
diff --git a/src/saveload/company_sl.cpp b/src/saveload/company_sl.cpp index 2684a0655..894611d6e 100644 --- a/src/saveload/company_sl.cpp +++ b/src/saveload/company_sl.cpp @@ -349,8 +349,7 @@ static void Check_PLYR() 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 @@ static void Check_PLYR() } } + 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; } } diff --git a/src/saveload/town_sl.cpp b/src/saveload/town_sl.cpp index c0b48c6ba..512c3b4c5 100644 --- a/src/saveload/town_sl.cpp +++ b/src/saveload/town_sl.cpp @@ -205,6 +205,10 @@ static void Load_TOWN() 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"); + } } } |