Freigeben über


BadOverflowGuard (CodeQL-Abfrage für Windows-Treiber)

Überblick

Die Überprüfung auf einen Überlauf einer Ergänzung 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-Integer konvertiert wird.

Empfehlung

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

Beispiel

In diesem Beispiel führt das Ergebnis des Vergleichs zu einem ganzzahligen Ü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 die Addition 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. Details dazu, wie Windows-Treiberentwickler CodeQL herunterladen und ausführen können, finden Sie auf der Seite " CodeQL" und auf der Seite "Logotest für statische Tools ".