Freigeben über


InfiniteLoop (Windows-TreibercodeQL-Abfrage)

Übersicht

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 größer als SHRT_MAX ist:

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 so, dass er der Breite eines entspricht:

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

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 .