From daced24223ce60898535352d4a3efa6424ab2835 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 23 Feb 2013 16:05:08 +0100 Subject: Core/Vehicles: Really make RemovePendingEventsForSeat iterating crash safe --- src/server/game/Entities/Vehicle/Vehicle.cpp | 11 ++++++----- src/server/game/Entities/Vehicle/Vehicle.h | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp index 20110a555cd..951b55d9160 100755 --- a/src/server/game/Entities/Vehicle/Vehicle.cpp +++ b/src/server/game/Entities/Vehicle/Vehicle.cpp @@ -742,16 +742,17 @@ void Vehicle::RemovePendingEvent(VehicleJoinEvent* e) * @param seatId Identifier for the seat. */ -void Vehicle::RemovePendingEventsForSeat(uint8 seatId) +void Vehicle::RemovePendingEventsForSeat(int8 seatId) { for (std::deque::iterator itr = _pendingJoinEvents.begin(); itr != _pendingJoinEvents.end();) { - std::deque::iterator cur = itr++; - if (uint8((*itr)->Seat->first) == seatId) + if ((*itr)->Seat->first == seatId) { (*itr)->to_Abort = true; - _pendingJoinEvents.erase(cur); + _pendingJoinEvents.erase(itr++); } + else + ++itr; } } @@ -775,7 +776,7 @@ bool VehicleJoinEvent::Execute(uint64, uint32) ASSERT(Passenger->IsInWorld()); ASSERT(Target->GetBase()->IsInWorld()); - Target->RemovePendingEventsForSeat(uint8(Seat->first)); + Target->RemovePendingEventsForSeat(Seat->first); Passenger->m_vehicle = Target; Seat->second.Passenger = Passenger->GetGUID(); diff --git a/src/server/game/Entities/Vehicle/Vehicle.h b/src/server/game/Entities/Vehicle/Vehicle.h index 65aa6f2517b..4f3d2eea4ec 100644 --- a/src/server/game/Entities/Vehicle/Vehicle.h +++ b/src/server/game/Entities/Vehicle/Vehicle.h @@ -96,7 +96,7 @@ class Vehicle : public TransportBase void CancelJoinEvent(VehicleJoinEvent* e); void RemovePendingEvent(VehicleJoinEvent* e); - void RemovePendingEventsForSeat(uint8 seatId); + void RemovePendingEventsForSeat(int8 seatId); private: Unit* _me; ///< The underlying unit with the vehicle kit. Can be player or creature. -- cgit v1.2.3