From cc8d5a3aca73698455e636c47a46244b09f2bc5c Mon Sep 17 00:00:00 2001 From: Machiavelli Date: Mon, 18 Feb 2013 02:20:42 +0100 Subject: Core/Vehicles: Prevent infinite loop in VehicleJoinEvent:Abort --- src/server/game/Entities/Vehicle/Vehicle.cpp | 5 +++++ src/server/game/Entities/Vehicle/Vehicle.h | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp index c70d6413886..9dd25577fe1 100755 --- a/src/server/game/Entities/Vehicle/Vehicle.cpp +++ b/src/server/game/Entities/Vehicle/Vehicle.cpp @@ -811,6 +811,11 @@ bool VehicleJoinEvent::Execute(uint64, uint32) void VehicleJoinEvent::Abort(uint64) { + // Prevent recursion + if (_executedAbort) + return; + + _executedAbort = true; sLog->outDebug(LOG_FILTER_VEHICLES, "Passenger GuidLow: %u, Entry: %u, board on vehicle GuidLow: %u, Entry: %u SeatId: %i cancelled", Passenger->GetGUIDLow(), Passenger->GetEntry(), Target->GetBase()->GetGUIDLow(), Target->GetBase()->GetEntry(), (int32)Seat->first); diff --git a/src/server/game/Entities/Vehicle/Vehicle.h b/src/server/game/Entities/Vehicle/Vehicle.h index 7ec0df8e533..01b8a0c581f 100644 --- a/src/server/game/Entities/Vehicle/Vehicle.h +++ b/src/server/game/Entities/Vehicle/Vehicle.h @@ -107,12 +107,15 @@ class VehicleJoinEvent : public BasicEvent { friend class Vehicle; protected: - VehicleJoinEvent(Vehicle* v, Unit* u) : Target(v), Passenger(u), Seat(Target->Seats.end()) {} + VehicleJoinEvent(Vehicle* v, Unit* u) : Target(v), Passenger(u), Seat(Target->Seats.end()), _executedAbort(false) {} bool Execute(uint64, uint32); void Abort(uint64); Vehicle* Target; Unit* Passenger; SeatMap::iterator Seat; + + private: + bool _executedAbort; }; #endif -- cgit v1.2.3