Delen via


InfiniteLoop (Windows Driver CodeQL-query)

Overzicht

Vergelijkingen tussen verschillende breedtes van typen in een lusvoorwaarde kunnen ertoe leiden dat de lus niet eindigt.

Aanbeveling

Gebruik de juiste typen in de lusvoorwaarde.

Voorbeeld

In dit voorbeeld kan het resultaat van de vergelijking resulteren in een oneindige lus als de waarde voor argument: a groter is dan SHRT_MAX:

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

Om de fout op te lossen, wijzigen we het type voor de variabele i zodat deze overeenkomt met de breedte van een:

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

Aanvullende details

Deze query vindt u in de Microsoft GitHub CodeQL-opslagplaats. Zie de pagina CodeQL en de pagina Logotest voor statische hulpprogramma's voor meer informatie over hoe ontwikkelaars van Windows-stuurprogramma's CodeQL kunnen downloaden en uitvoeren.