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 <noreply@anthropic.com>
This commit is contained in:
SylvaniaCore deploy
2026-08-19 22:33:55 +02:00
parent 0ed9cfa20d
commit 193d36dcbc
@@ -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);