Udostępnij za pomocą


InfiniteLoop (Zapytanie CodeQL sterownika systemu Windows)

Przegląd

Porównania między typami różnych szerokości w warunku pętli mogą spowodować niepowodzenie zakończenia pętli.

Rekomendacja

Użyj odpowiednich typów w warunku pętli.

Przykład

W tym przykładzie wynik porównania może spowodować nieskończoną pętlę, jeśli wartość argumentu jest większa niż SHRT_MAX:

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

Aby naprawić usterkę, zmieniamy typ zmiennej i tak, aby był zgodny z szerokością elementu:

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

Dodatkowe szczegóły

To zapytanie można znaleźć w repozytorium Microsoft GitHub CodeQL. Zobacz stronę CodeQL i Static Tools Logo Test, aby uzyskać szczegółowe informacje na temat pobierania i uruchamiania CodeQL przez programistów sterowników systemu Windows.