Partilhar via


InfiniteLoop (Consulta CodeQL do Driver do Windows)

Visão geral

Comparações entre tipos de larguras diferentes em uma condição de loop podem fazer com que o loop falhe ao término.

Recomendação

Use tipos apropriados na condição de loop.

Exemplo

Neste exemplo, o resultado da comparação poderá resultar em um loop infinito se o valor do argumento: um for maior que SHRT_MAX:

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

Para corrigir o bug, estamos alterando o tipo da variável i para corresponder à largura de um:

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

Additional Details

Essa consulta pode ser encontrada no repositório CodeQL do Microsoft GitHub. Consulte a página Teste do Logotipo das Ferramentas Estáticas e CodeQL para obter detalhes sobre como os desenvolvedores do Windows Driver podem baixar e executar o CodeQL.