InfiniteLoop (CodeQL-fråga för Windows-drivrutin)

Översikt

Jämförelser mellan olika typer av bredder i ett loopvillkor kan leda till att loopen inte avslutas.

Rekommendation

Använd lämpliga typer i loopvillkoret.

Exempel

I det här exemplet kan resultatet av jämförelsen resultera i en oändlig loop om värdet för argumentet: en är större än SHRT_MAX:

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

För att åtgärda felet ändrar vi typen för variabeln i så att den matchar bredden på en:

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

Ytterligare information

Den här frågan finns på Microsoft GitHub CodeQL-lagringsplatsen. Mer information om hur Windows Driver-utvecklare kan ladda ner och köra CodeQL finns på sidan CodeQL och testsidan för logotyper av statiska verktyg.