From 7cd61b581cfdf3259685f72a4168b3f9aa102c5d Mon Sep 17 00:00:00 2001 From: Treeston Date: Tue, 9 Jan 2018 23:42:22 +0100 Subject: Core/Threat: fix a potential super edge case iterator invalidation (cherry picked from commit 3dcd49ef9015582be304e2521e13052c68b917d6) --- src/server/game/Combat/ThreatManager.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/server') diff --git a/src/server/game/Combat/ThreatManager.cpp b/src/server/game/Combat/ThreatManager.cpp index d57c6abcb99..63606ddb307 100644 --- a/src/server/game/Combat/ThreatManager.cpp +++ b/src/server/game/Combat/ThreatManager.cpp @@ -342,7 +342,9 @@ void ThreatManager::AddThreat(Unit* target, float amount, SpellInfo const* spell if (!redirInfo.empty()) { float const origAmount = amount; - for (auto const& pair : redirInfo) // (victim,pct) + // intentional copy - there's a nested AddThreat call further down that might cause AI calls which cast spells + auto const redirects = redirInfo; + for (auto const& pair : redirects) // (victim,pct) { Unit* redirTarget = nullptr; auto it = _myThreatListEntries.find(pair.first); // try to look it up in our threat list first (faster) -- cgit v1.2.3