diff options
author | DizzyEggg <jajkodizzy@wp.pl> | 2020-07-27 12:27:35 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-27 12:27:35 +0200 |
commit | f007165c538376fa8357727783ede54884c982e1 (patch) | |
tree | be26bbc72688eee63ce7c1e8866a0bc0f4a6e026 /src | |
parent | 2e077f09e43e502a9ffaa93a916babe99b0d6e08 (diff) |
Fix undefined behaviour in protect animation
gPlttBufferFaded[sprite->data[2] + ++i] = gPlttBufferFaded[sprite->data[2] + i + 1]
The above does NOT make it certain that i gets incremented before reading from the right side. Changed it, so the function always increments i first, then reads from pal buffer.
Diffstat (limited to 'src')
-rw-r--r-- | src/battle_anim_effects_1.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index 516c58e55..f93b2a5c4 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -3967,21 +3967,21 @@ static void AnimProtect(struct Sprite* sprite) static void AnimProtect_Step(struct Sprite *sprite) { - int a; - int i; + int i, id, savedPal; sprite->data[5] += 96; sprite->pos2.x = -(sprite->data[5] >> 8); if (++sprite->data[1] > 1) { sprite->data[1] = 0; - a = gPlttBufferFaded[sprite->data[2] + 1]; + savedPal = gPlttBufferFaded[sprite->data[2] + 1]; i = 0; - do + while (i < 6) { - gPlttBufferFaded[sprite->data[2] + ++i] = gPlttBufferFaded[sprite->data[2] + i + 1]; - } while (i < 6); + id = sprite->data[2] + ++i; + gPlttBufferFaded[id] = gPlttBufferFaded[id + 1]; + } - gPlttBufferFaded[sprite->data[2] + 7] = a; + gPlttBufferFaded[sprite->data[2] + 7] = savedPal; } if (sprite->data[7] > 6 && sprite->data[0] >0 && ++sprite->data[6] > 1) |