Compartir a través de


BadOverflowGuard (consulta codeQL del controlador de Windows)

Información general

La comprobación del desbordamiento de una adición comparando con uno de los argumentos de la suma produce un error si el tamaño de todos los tipos de argumentos es inferior a 4 bytes. Esto se debe a que el resultado de la adición se promueve a un entero de 4 bytes.

Recomendación

Compruebe el desbordamiento comparando la suma con un valor que sea de al menos 4 bytes.

Ejemplo

En este ejemplo, el resultado de la comparación dará como resultado un desbordamiento entero:

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 corregir el error, compruebe el desbordamiento comparando la suma con un valor que sea de al menos 4 bytes:

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

Detalles adicionales

Esta consulta se puede encontrar en el repositorio de Microsoft GitHub CodeQL. Consulte la página CodeQL y static Tools Logo Test (Prueba de logotipo de herramientas estáticas ) para obtener más información sobre cómo los desarrolladores de Controladores de Windows pueden descargar y ejecutar CodeQL.