aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorD G Turner2011-06-23 18:35:27 +0100
committerD G Turner2011-06-23 18:35:27 +0100
commit714976729d0badab3e7557f62036aac0b2e9cc4f (patch)
treea8731d07d7a981f1cf41c0c417656b516619208f
parentb3d8e426c258cc20cacfa1ab5f4613e40bd10c76 (diff)
downloadscummvm-rg350-714976729d0badab3e7557f62036aac0b2e9cc4f.tar.gz
scummvm-rg350-714976729d0badab3e7557f62036aac0b2e9cc4f.tar.bz2
scummvm-rg350-714976729d0badab3e7557f62036aac0b2e9cc4f.zip
SAGA: Fix for Bug #3324850 ("ITE (SAGA): crash in dog sewers")
This read of 1 byte past the end of the buffer has existed since the dragonMove() function was implemented, but since the change in bfb0986c to use ByteArray, this now causes an assertion due to the stricter bounds checking. This commit corrects the original issue. Thanks to fuzzie for this fix.
-rw-r--r--engines/saga/actor_walk.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/engines/saga/actor_walk.cpp b/engines/saga/actor_walk.cpp
index 5607fcdd66..ea33a0950d 100644
--- a/engines/saga/actor_walk.cpp
+++ b/engines/saga/actor_walk.cpp
@@ -1165,7 +1165,15 @@ void Actor::moveDragon(ActorData *actor) {
dir0 = actor->_actionDirection;
dir1 = actor->_tileDirections[actor->_walkStepIndex++];
dir2 = actor->_tileDirections[actor->_walkStepIndex];
- dir3 = actor->_tileDirections[actor->_walkStepIndex + 1];
+ // Fix for Bug #3324850 ("ITE (SAGA): crash in dog sewers")
+ // If there were more than two steps left, get the third (next) step.
+ // Otherwise, store the second step again so the anim looks right.
+ // (If you stop the move instead, Rif isn't automatically knocked into
+ // the Sewer.)
+ if (actor->_walkStepIndex + 1 < actor->_walkStepsCount)
+ dir3 = actor->_tileDirections[actor->_walkStepIndex + 1];
+ else
+ dir3 = dir2;
if (dir0 != dir1){
actor->_actionDirection = dir0 = dir1;