Condividi tramite


InfiniteLoop (query CodeQL del driver Windows)

Panoramica

I confronti tra tipi di larghezze diverse in una condizione del ciclo possono causare l'interruzione del ciclo.

Recommendation

Usare i tipi appropriati nella condizione del ciclo.

Esempio

In questo esempio, il risultato del confronto può comportare un ciclo infinito se il valore per l'argomento è maggiore di SHRT_MAX:

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

Per correggere il bug, si sta modificando il tipo per la variabile i in modo che corrisponda alla larghezza di un:

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

Altri dettagli

Questa query è disponibile nel repository CodeQL di Microsoft GitHub. Per informazioni dettagliate su come gli sviluppatori di Driver Windows possono scaricare ed eseguire CodeQL, vedere la pagina CodeQL e la pagina Test logo degli strumenti statici .