Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ü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 ".