Freigeben über


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

Überblick

Vergleiche zwischen Typen unterschiedlicher Breite in einer Schleifenbedingung können dazu führen, dass die Schleife nicht beendet wird.

Empfehlung

Verwenden Sie geeignete Typen in der Schleifenbedingung.

Beispiel

In diesem Beispiel kann das Ergebnis des Vergleichs zu einer Endlosschleife führen, wenn der Wert für argument: a ist größer als SHRT_MAX:

void InfiniteLoop(int a)
{
    for (short i = 0; i < a; i++) // BUG: infinite loop
    {
        // ...
    }
}

Um den Fehler zu beheben, ändern wir den Typ für die Variable i, um die Breite von a zu entsprechen.

void NotInfiniteLoop(int a)
{
    for (int i = 0; i < a; i++) 
    {
        // ...
    }
}

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 ".