From d71a7c21da27e5f99e48b8ad21b669d078932e35 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Thu, 23 May 2019 22:40:34 +0100 Subject: Fix #7593: Crash in ScriptOrder::GetOrderDistance in VT_AIR mode Null pointer dereference occurred when either origin_tile or dest_tile were waypoint tiles. --- src/script/api/script_order.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/script/api/script_order.cpp b/src/script/api/script_order.cpp index a72245d04..045968874 100644 --- a/src/script/api/script_order.cpp +++ b/src/script/api/script_order.cpp @@ -669,8 +669,14 @@ static void _DoCommandReturnSetOrderFlags(class ScriptInstance *instance) /* static */ uint ScriptOrder::GetOrderDistance(ScriptVehicle::VehicleType vehicle_type, TileIndex origin_tile, TileIndex dest_tile) { if (vehicle_type == ScriptVehicle::VT_AIR) { - if (ScriptTile::IsStationTile(origin_tile) && ::Station::GetByTile(origin_tile)->airport.tile != INVALID_TILE) origin_tile = ::Station::GetByTile(origin_tile)->airport.tile; - if (ScriptTile::IsStationTile(dest_tile) && ::Station::GetByTile(dest_tile)->airport.tile != INVALID_TILE) dest_tile = ::Station::GetByTile(dest_tile)->airport.tile; + if (ScriptTile::IsStationTile(origin_tile)) { + Station *orig_station = ::Station::GetByTile(origin_tile); + if (orig_station != nullptr && orig_station->airport.tile != INVALID_TILE) origin_tile = orig_station->airport.tile; + } + if (ScriptTile::IsStationTile(dest_tile)) { + Station *dest_station = ::Station::GetByTile(dest_tile); + if (dest_station != nullptr && dest_station->airport.tile != INVALID_TILE) dest_tile = dest_station->airport.tile; + } return ScriptMap::DistanceSquare(origin_tile, dest_tile); } else { -- cgit v1.2.3-70-g09d2