Partilhar via


C6029

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

Esse aviso indica que uma função que usa um tamanho e um buffer está sendo passada um tamanho desmarcado.Os dados de leitura na entrada de alguma fonte externa não foi verificados para ver se ela é menor que o tamanho do buffer.Um invasor poderia especificar intencionalmente um muito maior do que o valor esperado para o tamanho, o que levará a um estouro de buffer.

Em geral, sempre que você ler dados de uma fonte externa não confiável, certifique-se de verificar sua validade.Normalmente é apropriado verificar o tamanho para verificar se que ele está no intervalo esperado.

Exemplo

O código a seguir gera esse aviso chamando a função anotada ReadFile duas vezes.Após a primeira chamada, a postagem de atributo marcas de propriedade, o valor do segundo parâmetro não confiáveis.Portanto, passando um valor não confiável na segunda chamada para ReadFile gera esse aviso, conforme mostrado no código a seguir:

#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 corrigir esse aviso, verifique o tamanho do buffer, conforme mostrado no código a seguir:

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;
}

Consulte também

Outros recursos

Visão geral de anotação