From 54067acb0fad35c52ea0b5a750168a62b236f8d3 Mon Sep 17 00:00:00 2001 From: rubidium Date: Thu, 8 Apr 2010 17:07:35 +0000 Subject: [PATCH] (svn r19586) -Fix: some false positives in cache validity checks because cache = v->cache doesn't necessarily write all sizeof(Cache) bytes --- src/openttd.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/openttd.cpp b/src/openttd.cpp index 4c25fd1c65..8f6edee8bf 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1111,7 +1111,9 @@ static void CheckCaches() switch (v->type) { case VEH_ROAD: { RoadVehicle *rv = RoadVehicle::From(v); - RoadVehicleCache cache = rv->rcache; + RoadVehicleCache cache; + memset(&cache, 0, sizeof(cache)); + cache = rv->rcache; RoadVehUpdateCache(rv); if (memcmp(&cache, &rv->rcache, sizeof(RoadVehicleCache)) != 0) { @@ -1124,7 +1126,7 @@ static void CheckCaches() Train *t = Train::From(v); for (Vehicle *u = t; u != NULL; u = u->Next()) length++; - TrainCache *wagons = MallocT(length); + TrainCache *wagons = CallocT(length); length = 0; for (Train *u = t; u != NULL; u = u->Next()) wagons[length++] = u->tcache; @@ -1143,7 +1145,9 @@ static void CheckCaches() case VEH_AIRCRAFT: { Aircraft *a = Aircraft::From(v); - AircraftCache cache = a->acache; + AircraftCache cache; + memset(&cache, 0, sizeof(cache)); + cache = a->acache; UpdateAircraftCache(a); if (memcmp(&cache, &a->acache, sizeof(AircraftCache)) != 0) {