Partager via


InfiniteLoop (requête CodeQL du pilote Windows)

Vue d’ensemble

Les comparaisons entre des types de largeurs différentes dans une condition de boucle peuvent entraîner l’échec de l’arrêt de la boucle.

Recommandation

Utilisez les types appropriés dans la condition de boucle.

Exemple

Dans cet exemple, le résultat de la comparaison peut entraîner une boucle infinie si la valeur de l’argument : a est supérieure à SHRT_MAX :

void InfiniteLoop(int a)
{
    for (short i = 0; i < a; i++) // BUG: infinite loop
    {
        // ...
    }
}

Pour résoudre le bogue, nous modifions le type de la variable i pour qu’elle corresponde à la largeur d’un :

void NotInfiniteLoop(int a)
{
    for (int i = 0; i < a; i++) 
    {
        // ...
    }
}

Informations supplémentaires

Cette requête se trouve dans le référentiel Microsoft GitHub CodeQL. Consultez la page CodeQL et Static Tools Logo Test pour plus d’informations sur la façon dont les développeurs de pilotes Windows peuvent télécharger et exécuter CodeQL.