summaryrefslogtreecommitdiff
path: root/src/saveload/vehicle_sl.cpp
diff options
context:
space:
mode:
authorsmatz <smatz@openttd.org>2011-02-08 18:34:13 +0000
committersmatz <smatz@openttd.org>2011-02-08 18:34:13 +0000
commit887a7724dc3f68cdd3d0c566c66adf00696e4bc0 (patch)
tree00a9055a6bc84b0f9d278e3a8faac022dd0a3778 /src/saveload/vehicle_sl.cpp
parent364ef8e6e6342f8f777da561571422c8c57c402b (diff)
downloadopenttd-887a7724dc3f68cdd3d0c566c66adf00696e4bc0.tar.xz
(svn r22025) -Fix: verify there is enough space in the pool when creating new pool items while loading old savegames
Diffstat (limited to 'src/saveload/vehicle_sl.cpp')
-rw-r--r--src/saveload/vehicle_sl.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp
index d1558d966..f264c3d10 100644
--- a/src/saveload/vehicle_sl.cpp
+++ b/src/saveload/vehicle_sl.cpp
@@ -270,6 +270,11 @@ void AfterLoadVehicles(bool part_of_load)
if (IsSavegameVersionBefore(105)) { // Pre-105 didn't save an OrderList
if (mapping[v->orders.old] == NULL) {
/* This adds the whole shared vehicle chain for case b */
+
+ /* Creating an OrderList here is safe because the number of vehicles
+ * allowed in these savegames matches the number of OrderLists. As
+ * such each vehicle can get an OrderList and it will (still) fit. */
+ assert(OrderList::CanAllocateItem());
v->orders.list = mapping[v->orders.old] = new OrderList(v->orders.old, v);
} else {
v->orders.list = mapping[v->orders.old];
@@ -752,7 +757,7 @@ void Load_VEHS()
SlObject(v, GetVehicleDescription(vtype));
- if (_cargo_count != 0 && IsCompanyBuildableVehicleType(v)) {
+ if (_cargo_count != 0 && IsCompanyBuildableVehicleType(v) && CargoPacket::CanAllocateItem()) {
/* Don't construct the packet with station here, because that'll fail with old savegames */
CargoPacket *cp = new CargoPacket(_cargo_count, _cargo_days, _cargo_source, _cargo_source_xy, _cargo_loaded_at_xy, _cargo_feeder_share);
v->cargo.Append(cp);