Compartir a través de


C6029

warning C6029: possible buffer overrun in call to <function>: use of unchecked value

Esta advertencia indica que se está pasando un tamaño sin comprobar a una función con búfer y tamaño.No se comprobaron los datos de lectura desde algún origen externo para ver si es menor que el tamaño de búfer.Un atacante podría especificar intencionadamente un valor mucho mayor que el esperado para el tamaño, lo que conducirá a una saturación del búfer.

Por lo general, cada vez que se lean los datos desde un origen externo que no sea de confianza, asegúrese de comprobar su validez.Normalmente es adecuado comprobar el tamaño para asegurarse de que se encuentre en el intervalo esperado.

Ejemplo

El código siguiente genera esta advertencia llamando a la función anotada ReadFile dos veces.Después de la primera llamada, la propiedad del atributo Post marca el segundo valor de parámetro como que no es de confianza.Por lo tanto, pasar un valor que no es de confianza en la segunda llamada a ReadFile genera esta advertencia tal y como se muestra en el código siguiente:

#include "windows.h"

bool f(HANDLE hFile)
{
    char buff[MAX_PATH];

    DWORD cbLen;
    DWORD cbRead;

    // Read the number of byte to read (cbLen).
    if (!ReadFile (hFile, &cbLen, sizeof (cbLen), &cbRead, NULL))  
    {
        return false;
    }
    // Read the bytes
    if (!ReadFile (hFile, buff, cbLen, &cbRead, NULL))  // warning 6029
    {
        return false;
    }

    return true;
}

Para corregir esta advertencia, compruebe el tamaño de búfer tal y como se muestra en el siguiente código:

bool f(HANDLE hFile)
{
    char buff[MAX_PATH];

    DWORD cbLen;
    DWORD cbRead;

    // Read the number of byte to read (cbLen).
    if (!ReadFile (hFile, &cbLen, sizeof (cbLen), &cbRead, NULL))  
    {
        return false;
    }
    // Ensure that there's enough space in the buffer to read that many bytes.
    if (cbLen > sizeof(buff))
    {
        return false;
    }
    // Read the bytes
    if (!ReadFile (hFile, buff, cbLen, &cbRead, NULL))  // warning 6029
    {
        return false;
    }

    return true;
}

Vea también

Otros recursos

Información general sobre anotaciones