Freigeben über


BadOverflowGuard (CodeQL-Abfrage des Windows-Treibers)

Übersicht

Die Überprüfung auf Überlauf einer Addition durch Vergleich mit einem der Argumente der Addition schlägt fehl, wenn die Größe aller Argumenttypen kleiner als 4 Byte ist. Dies liegt daran, dass das Ergebnis der Addition zu einem 4-Byte-Int heraufgestuft wird.

Empfehlung

Überprüfen Sie den Überlauf, indem Sie den Zusatz mit einem Wert vergleichen, der mindestens 4 Byte beträgt.

Beispiel

In diesem Beispiel führt das Ergebnis des Vergleichs zu einem Ganzzahlüberlauf:

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;
}

Um den Fehler zu beheben, überprüfen Sie den Überlauf, indem Sie den Zusatz mit einem Wert vergleichen, der mindestens 4 Byte beträgt:

unsigned short CheckForInt16OverflowCorrectCode(unsigned short v, unsigned short b)
{
    if (v + b > 0x00FFFF)
    {
        // ... do something
    }
    return v + b;
}

Zusätzliche Details

Diese Abfrage finden Sie im Microsoft GitHub CodeQL-Repository. Weitere Informationen dazu, wie Entwickler von Windows-Treibern CodeQL herunterladen und ausführen können, finden Sie auf der Seite CodeQL und auf der Seite Logo-Test für statische Tools .