Partager via


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 .