changeset 14975:30a0abfe85ca draft

(svn r19586) -Fix: some false positives in cache validity checks because cache = v->cache doesn't necessarily write all sizeof(Cache) bytes
author rubidium <rubidium@openttd.org>
date Thu, 08 Apr 2010 17:07:35 +0000
parents d21b5153e575
children 8b5d0410a028
files src/openttd.cpp
diffstat 1 files changed, 7 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/openttd.cpp
+++ b/src/openttd.cpp
@@ -1111,7 +1111,9 @@
 		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 @@
 				Train *t = Train::From(v);
 				for (Vehicle *u = t; u != NULL; u = u->Next()) length++;
 
-				TrainCache *wagons = MallocT<TrainCache>(length);
+				TrainCache *wagons = CallocT<TrainCache>(length);
 				length = 0;
 				for (Train *u = t; u != NULL; u = u->Next()) wagons[length++] = u->tcache;
 
@@ -1143,7 +1145,9 @@
 
 			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) {