C6029
Aviso C6029: chamada para <function> de saturação de buffer possível: uso de valor não verificado
Este aviso indica que uma função que assume um tamanho e um buffer está sendo passada um tamanho não verificado. Os dados de leitura-in de alguma origem externa não foi verificados para ver se é menor que o tamanho do buffer. Um invasor intencionalmente pode especificar um muito maior do que o valor esperado para o tamanho, o que levará a uma saturação de buffer.
Em geral, sempre que você pode ler dados de uma fonte externa não confiável, certifique-se de verificar a validade. Normalmente é apropriado verificar o tamanho para certificar-se de que ele está no intervalo esperado.
Exemplo
O código a seguir gera este aviso chamando a função anotada ReadFile duas vezes. Após a primeira chamada, o Post atributo marcas de propriedade, o segundo valor de parâmetro não confiável. Portanto, passando um valor não confiável a 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;
}