Compartilhar via


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

Consulte também

Conceitos

Visão geral de anotação