BadOverflowGuard (requête CodeQL du pilote Windows)
Vue d’ensemble
La vérification du dépassement de capacité d’un ajout par rapport à l’un des arguments de l’ajout échoue si la taille de tous les types d’arguments est inférieure à 4 octets. Cela est dû au fait que le résultat de l’ajout est promu à un int de 4 octets.
Recommandation
Vérifiez le dépassement de capacité en comparant l’addition à une valeur d’au moins 4 octets.
Exemple
Dans cet exemple, le résultat de la comparaison entraîne un dépassement d’entier :
unsigned short CheckForInt16OverflowBadCode(unsigned short v, unsigned short b)
{
if (v + b < v) // BUG: "v + b" will be promoted to 32 bits
{
// ... do something
}
return v + b;
}
Pour corriger le bogue, case activée le dépassement de capacité en comparant l’ajout à une valeur d’au moins 4 octets :
unsigned short CheckForInt16OverflowCorrectCode(unsigned short v, unsigned short b)
{
if (v + b > 0x00FFFF)
{
// ... do something
}
return v + b;
}
Informations supplémentaires
Cette requête se trouve dans le référentiel Microsoft GitHub CodeQL. Pour plus d’informations sur la façon dont les développeurs Windows Driver peuvent télécharger et exécuter CodeQL, consultez la page CodeQL et la page Test du logo Static Tools .