From 193d36dcbc7f3fa672b804961080b0d058182e0d Mon Sep 17 00:00:00 2001 From: SylvaniaCore deploy Date: Wed, 19 Aug 2026 22:33:55 +0200 Subject: [PATCH] Sage Mari : ecriture hors limites sur le tableau des fontaines Signale en jeu : premier boss du Temple du serpent de jade infaisable, le bouclier du boss ne tombe jamais. Le tableau foutainTrigger a 4 cases (indices 0-3), mais les deux acces utilisaient la PRE-incrementation : ecriture : foutainTrigger[++tab] -> indices 1,2,3,4 lecture : foutainTrigger[++foutainCount] -> indices 1,2,3,4 Lindice 0 netait jamais rempli, et lindice 4 ecrivait 16 octets hors limites - juste par-dessus hydrolancePhase, declare immediatement apres le tableau. La salle contenant exactement 4 Fountain Stalker (56586), le debordement etait systematique a chaque pull. Corrige en post-incrementation des deux cotes, avec garde de borne a lecriture. La condition de fin de phase (foutainCount == 4) reste juste. Co-Authored-By: Claude Opus 4.8 --- .../Pandaria/TempleJadeSerpent/boss_wise_mari.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/server/scripts/Pandaria/TempleJadeSerpent/boss_wise_mari.cpp b/src/server/scripts/Pandaria/TempleJadeSerpent/boss_wise_mari.cpp index 5efad84..77a5f39 100644 --- a/src/server/scripts/Pandaria/TempleJadeSerpent/boss_wise_mari.cpp +++ b/src/server/scripts/Pandaria/TempleJadeSerpent/boss_wise_mari.cpp @@ -162,7 +162,15 @@ class boss_wase_mari : public CreatureScript itr->RemoveAllAuras(); - foutainTrigger[++tab] = itr->GetGUID(); + // Le pre-incrementation remplissait les indices 1 a 4 d'un + // tableau de 4 (indices valides 0-3) : l'indice 0 restait vide + // et le 4e ecrivait 16 octets HORS LIMITES, juste par-dessus + // hydrolancePhase. Avec exactement 4 fontaines dans la salle, + // le debordement etait systematique a chaque pull. + if (tab >= 4) + break; + + foutainTrigger[tab++] = itr->GetGUID(); } searcher.clear(); @@ -247,7 +255,9 @@ class boss_wase_mari : public CreatureScript Talk(TEXT_CALL_WATER); - Creature* trigger = ObjectAccessor::GetCreature(*me, foutainTrigger[++foutainCount]); + // Meme decalage a la lecture : le 4e appel relisait + // hydrolancePhase reinterprete en ObjectGuid. + Creature* trigger = ObjectAccessor::GetCreature(*me, foutainTrigger[foutainCount++]); if (trigger) { me->CastSpell(trigger, SPELL_CALL_WATER, true);