C6029
Aviso C6029: possível saturação de buffer na telefonar para <função>: uso de valor não verificado
Este aviso indica que uma função que assume um buffer e um dimensionar está sendo passada um dimensionar não verificado.Os dados leitura-de alguma fonte externa não foi verificados para ver se é menor do que o dimensionar do buffer.Um invasor poderia especificar intencionalmente um muito maior do que o valor esperado para o dimensionar, o que o levará a uma saturação do buffer.
Em geral, sempre que ler dados de uma fonte não confiável externa, certifique-se de verificá-lo para fins de validade.É geralmente apropriado verificar o dimensionar do Certifique-se de que ele esteja no intervalo esperado.
Exemplo
O código a seguir gera este aviso chamando a função com anotações ReadFile duas vezes.Após a primeira telefonar, 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 telefonar para ReadFile gera este aviso conforme mostrado no código a seguir:
#include "windows.h"
void f(char *buff, DWORD cbLen, DWORD cbRead, HANDLE hFile)
{
if (!ReadFile (hFile, &cbLen, sizeof (cbLen), &cbRead, NULL))
{
// code ...
if (!ReadFile (hFile, buff, cbLen, &cbRead, NULL)) // warning 6029
{
// code ...
}
}
}
Para corrigir esse aviso, verifique o dimensionar do buffer sistema autônomo mostra o código a seguir:
void f(char *buff, DWORD cbLen, DWORD cbRead, HANDLE hFile)
{
if (!ReadFile (hFile, &cbLen, sizeof (cbLen), &cbRead, NULL))
{
// code ...
if (cbLen <= sizeof (buff)) // check length
{
// code ...
if (!ReadFile (hFile, buff, cbLen, &cbRead, NULL))
{
// code ...
}
}
}
}