From 5415b596b084fe43c855b5582d1dbdaae8c1ed37 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Wed, 28 Jun 2023 19:03:56 +0100 Subject: [PATCH] Handle case where VehicleLengthChanged called on engine without a GRF --- src/vehicle.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 821101bb68..9b4fad0bc5 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -419,6 +419,13 @@ void VehicleLengthChanged(const Vehicle *u) { /* show a warning once for each engine in whole game and once for each GRF after each game load */ const Engine *engine = u->GetEngine(); + if (engine->grf_prop.grffile == nullptr) { + // This can be reached if an engine is unexpectedly no longer attached to a GRF at all + if (GamelogGRFBugReverse(0, engine->grf_prop.local_id)) { + ShowNewGrfVehicleError(u->engine_type, STR_NEWGRF_BROKEN, STR_NEWGRF_BROKEN_VEHICLE_LENGTH, GBUG_VEH_LENGTH, true); + } + return; + } uint32 grfid = engine->grf_prop.grffile->grfid; GRFConfig *grfconfig = GetGRFConfig(grfid); if (GamelogGRFBugReverse(grfid, engine->grf_prop.local_id) || !HasBit(grfconfig->grf_bugs, GBUG_VEH_LENGTH)) {