Compartir a través de


InfiniteLoop (consulta de CodeQL del controlador de Windows)

Información general

Las comparaciones entre tipos de anchos diferentes en una condición de bucle pueden provocar que el bucle no finalice.

Recomendación

Use los tipos adecuados en la condición de bucle.

Ejemplo

En este ejemplo, el resultado de la comparación puede dar lugar a un bucle infinito si el valor del argumento a es mayor que SHRT_MAX.

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

Para corregir el error, estamos cambiando el tipo de la variable i para que coincida con el ancho de a.

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

Detalles adicionales

Esta consulta se puede encontrar en el repositorio de Microsoft GitHub CodeQL. Consulta la página CodeQL y la Static Tools Logo Test para obtener más información sobre cómo los desarrolladores de controladores de Windows pueden descargar y ejecutar CodeQL.