From 8d96ea1a5e2d91382eb05cfe6957a968f444dd86 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 4 Sep 2025 03:18:26 +0100 Subject: [PATCH] Fix #14584: Crash due to drawing non-existent orders of new vehicle. (#14585) When the vehicle list window is grouped by orders, no check was made that vehicle's order list existed. --- src/vehicle_gui.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 3b1896cfff..5a0f6846f2 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -1682,14 +1682,16 @@ static void DrawSmallOrderList(const Vehicle *v, int left, int right, int y, uin } /** Draw small order list in the vehicle GUI, but without the little black arrow. This is used for shared order groups. */ -static void DrawSmallOrderList(const OrderList &orderlist, int left, int right, int y, uint order_arrow_width) +static void DrawSmallOrderList(const OrderList *orderlist, int left, int right, int y, uint order_arrow_width) { + if (orderlist == nullptr) return; + bool rtl = _current_text_dir == TD_RTL; int l_offset = rtl ? 0 : order_arrow_width; int r_offset = rtl ? order_arrow_width : 0; int i = 0; - for (const Order &order : orderlist.GetOrders()) { + for (const Order &order : orderlist->GetOrders()) { if (order.IsType(OT_GOTO_STATION)) { DrawString(left + l_offset, right - r_offset, y, GetString(STR_STATION_NAME, order.GetDestination()), TC_BLACK, SA_LEFT, false, FS_SMALL); @@ -1844,7 +1846,7 @@ void BaseVehicleListWindow::DrawVehicleListItems(VehicleID selected_vehicle, int DrawVehicleImage(vehgroup.vehicles_begin[i], {image_left + WidgetDimensions::scaled.hsep_wide * i, ir.top, image_right, ir.bottom}, selected_vehicle, EIT_IN_LIST, 0); } - if (show_orderlist) DrawSmallOrderList(*(vehgroup.vehicles_begin[0])->orders, olr.left, olr.right, ir.top + GetCharacterHeight(FS_SMALL), this->order_arrow_width); + if (show_orderlist) DrawSmallOrderList(vehgroup.vehicles_begin[0]->orders, olr.left, olr.right, ir.top + GetCharacterHeight(FS_SMALL), this->order_arrow_width); DrawString(ir.left, ir.right, ir.top + WidgetDimensions::scaled.framerect.top, GetString(STR_JUST_COMMA, vehgroup.NumVehicles()), TC_BLACK); break;