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.