From 2f3e4044b740581c54a38dc83b2b8fd44c01f823 Mon Sep 17 00:00:00 2001 From: keldorkatarn Date: Wed, 11 Apr 2018 21:25:15 +0200 Subject: [PATCH] FIX: TraceRestrictSlots: Fix crash when removing vehicle from slot. Invalid iterator got used. (it was no longer valid after calling erase with it) (cherry picked from commit 3571f1bc898b9ffd8b124040882caa5357085f42) Fixes: #37 --- src/tracerestrict.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/tracerestrict.cpp b/src/tracerestrict.cpp index 9b95b8fb3d..a2960006e7 100644 --- a/src/tracerestrict.cpp +++ b/src/tracerestrict.cpp @@ -1462,8 +1462,11 @@ void TraceRestrictSlot::DeIndex(VehicleID id) auto range = slot_vehicle_index.equal_range(id); for (auto it = range.first; it != range.second; ++it) { if (it->second == this->index) { + bool is_first_in_range = (it == range.first); + auto next = slot_vehicle_index.erase(it); - if (it == range.first && next == range.second) { + + if (is_first_in_range && next == range.second) { /* Only one item, which we've just erased, clear the vehicle flag */ ClrBit(Train::Get(id)->flags, VRF_HAVE_SLOT); }