changeset 16358:076aaf0952cc draft

(svn r21074) -Fix [FS#4194]: Crash when loading a corrupted 0.7.x (or before) savegame where the waypoint refered to an already removed town
author rubidium <rubidium@openttd.org>
date Mon, 01 Nov 2010 22:27:34 +0000
parents 567dfbef6aca
children 0672df5406f1
files src/saveload/waypoint_sl.cpp
diffstat 1 files changed, 9 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/saveload/waypoint_sl.cpp
+++ b/src/saveload/waypoint_sl.cpp
@@ -190,6 +190,15 @@
 			wp->town = ClosestTownFromTile(wp->xy, UINT_MAX);
 		} else if (CheckSavegameVersion(122)) {
 			/* Only for versions 12 .. 122 */
+			if (!Town::IsValidID(wp->town_index)) {
+				/* Upon a corrupted waypoint we'll likely get here. The next step will be to
+				 * loop over all Ptrs procs to NULL the pointers. However, we don't know
+				 * whether we're in the NULL or "normal" Ptrs proc. So just clear the list
+				 * of old waypoints we constructed and then this waypoint (and the other
+				 * possibly corrupt ones) will not be queried in the NULL Ptrs proc run. */
+				_old_waypoints.Clear();
+				SlErrorCorrupt("Referencing invalid Town");
+			}
 			wp->town = Town::Get(wp->town_index);
 		}
 		if (CheckSavegameVersion(84)) {