diff options
author | Machiavelli <machiavelli.trinity@gmail.com> | 2013-02-18 02:20:42 +0100 |
---|---|---|
committer | Machiavelli <machiavelli.trinity@gmail.com> | 2013-02-18 02:20:42 +0100 |
commit | cc8d5a3aca73698455e636c47a46244b09f2bc5c (patch) | |
tree | 1ddd46a486c4fdeb2527e7cfb5e478d9728b2cd7 | |
parent | 9004d39c09081e40fc6b18a356f1c9d79bc76ee3 (diff) |
Core/Vehicles: Prevent infinite loop in VehicleJoinEvent:Abort
-rwxr-xr-x | src/server/game/Entities/Vehicle/Vehicle.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Entities/Vehicle/Vehicle.h | 5 |
2 files changed, 9 insertions, 1 deletions
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 |