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.