Partilhar via


BadOverflowGuard (Consulta do CodeQL do Driver do Windows)

Visão geral

A verificação do estouro de uma adição comparando com um dos argumentos da adição falhará se o tamanho de todos os tipos de argumento for menor que 4 bytes. Isso ocorre porque o resultado da adição é promovido para um int de 4 bytes.

Recomendação

Verifique o overflow comparando a soma com um valor de pelo menos 4 bytes.

Exemplo

Neste exemplo, o resultado da comparação resultará num overflow inteiro.

unsigned short CheckForInt16OverflowBadCode(unsigned short v, unsigned short b)
{
    if (v + b < v) // BUG: "v + b" will be promoted to 32 bits
    {
        // ... do something
    }
    return v + b;
}

Para corrigir o bug, verifique o overflow comparando a soma com um valor de pelo menos 4 bytes:

unsigned short CheckForInt16OverflowCorrectCode(unsigned short v, unsigned short b)
{
    if (v + b > 0x00FFFF)
    {
        // ... do something
    }
    return v + b;
}

Detalhes Adicionais

Esta consulta pode ser encontrada no repositório Microsoft GitHub CodeQL. Consulte a página CodeQL e Teste de logotipo de ferramentas estáticas para obter detalhes sobre como os desenvolvedores de drivers do Windows podem baixar e executar o CodeQL.