Partager via


BadOverflowGuard (requête CodeQL du pilote Windows)

Aperçu

La vérification du dépassement d’un ajout en comparant à 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 vers un int de 4 octets.

Recommandation

Vérifiez le dépassement en comparant l’ajout à une valeur d’au moins 4 octets.

Exemple :

Dans cet exemple, le résultat de la comparaison entraîne un dépassement de capacité 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, vérifiez le dépassement 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. Consultez la page CodeQL et Static Tools Logo Test pour plus d’informations sur la façon dont les développeurs windows Driver peuvent télécharger et exécuter CodeQL.