Howto génération de bugs - épisode 3

Posted in cpp, bug, programmation

Petit exemple de code qui ne fait pas ce pourquoi il a été écrit

[cpp]
void MoveCharacter(Character& character, bool slowly)
{
   ...
   // Check we can move (to go not too fast)
   while (character.CanStillMoveRL(walking_pause) && ComputeHeightMovement (character, height, true));
   {
       // Move !
       Game::GetInstance()->character_already_chosen = true;
       // Eventually moves the character
       character.SetXY( Point2i(character.GetX() +character.GetDirection(),
                                character.GetY() +height) );
       // If no collision, let gravity do its job
       character.UpdatePosition();
   }
   ...
}

Le bug se situe ici dans le ; à la fin du while. La suite est alors considérée comme un bloc indépendant qui sera exécuté 1 seul fois et systématiquement à chaque fois que la fonction MoveCharacter() est appelée, ignorant complètement le résultat du test du while

PS: ce code a été écrit et modifié pour http://www.wormux.org Wormux. Je me suis bien pris la tête à chercher cette erreur bête (dont je suis l’auteur)!