Поделиться через


C6029

Обновлен: Ноябрь 2007

C6029

Предупреждение C6029: возможно переполнение буфера в вызове <функция>: используется непроверенное значение.

Это предупреждение указывает, что функция принимает буфер, а переданный размер не проверяется. Считанные из внешнего источника данные не проверены и могут быть меньше размера буфера. Злоумышленник может намеренно указать размер, намного превышающий необходимый, что приведет к переполнению буфера.

Обычно при чтении данных из ненадежного внешнего источника следует проверять их допустимость. Как правило, нужно проверять размер данных, чтобы убедиться, что он соответствует допустимому диапазону.

Пример

Следующий код приведет к возникновению этого предупреждения из-за того, что функция ReadFile с аннотацией вызывается дважды. После первого вызова свойство атрибута Post помечает второе значение параметра как ненадежное. Поэтому при передаче ненадежного значения во втором вызове функции ReadFile, как показано в следующем примере кода, возникает предупреждение:

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

Чтобы исправить это предупреждение, следует проверять размер буфера, как показано в следующем примере кода:

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

См. также

Основные понятия

Общие сведения о заметках