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:
@@ -162,7 +162,15 @@ class boss_wase_mari : public CreatureScript
|
|||||||
|
|
||||||
itr->RemoveAllAuras();
|
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();
|
searcher.clear();
|
||||||
@@ -247,7 +255,9 @@ class boss_wase_mari : public CreatureScript
|
|||||||
|
|
||||||
Talk(TEXT_CALL_WATER);
|
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)
|
if (trigger)
|
||||||
{
|
{
|
||||||
me->CastSpell(trigger, SPELL_CALL_WATER, true);
|
me->CastSpell(trigger, SPELL_CALL_WATER, true);
|
||||||
|
|||||||
Reference in New Issue
Block a user