diff options
author | Shauren <shauren.trinity@gmail.com> | 2013-02-23 16:05:08 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2013-02-23 16:05:08 +0100 |
commit | daced24223ce60898535352d4a3efa6424ab2835 (patch) | |
tree | e028430bc3eb6484a56139dd5f89d4d8738aa539 /src | |
parent | 7cab6d308aac9a13f5073d1762dc12676367f3a7 (diff) |
Core/Vehicles: Really make RemovePendingEventsForSeat iterating crash safe
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Entities/Vehicle/Vehicle.cpp | 11 | ||||
-rw-r--r-- | src/server/game/Entities/Vehicle/Vehicle.h | 2 |
2 files changed, 7 insertions, 6 deletions
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<VehicleJoinEvent*>::iterator itr = _pendingJoinEvents.begin(); itr != _pendingJoinEvents.end();) { - std::deque<VehicleJoinEvent*>::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. |