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


C6202

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

C6202

Предупреждение C6202. Переполнение буфера <переменная>, возможно, расположенного на стеке, при вызове <функция>: длина <размер> превышает размер буфера <максимум>

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

Пример

В следующем коде создаются предупреждения C6202 и C6386. Оба предупреждения указывают на проблему переполнения буфера, возникающую из-за передачи в функцию неверного параметра (sizeofintArray).

#include <memory.h>
void f( )
{
  int intArray[5];
  char charArray[5];

  memset ((void *)charArray, 0, sizeof intArray);
  // code ...
}

Для устранения этого предупреждения передайте правильный размер с помощью оператора sizeofcharArray, как указано в следующем коде:

#include <memory.h>
void f( )
{
  char charArray[5];
 
  memset ((void *)charArray, 0, sizeof charArray);
}

В следующем коде параметр char *pC функции объявляется с помощью свойства WritableElementsLength. Фактическое количество записываемых элементов в параметре pC равно количеству элементов буфера char *pCLen. В данном случае во время вызова создается предупреждение C6202, поскольку буфер pCLen содержит больше элементов, чем записываемый параметр pC.

#include <codeanalysis\sourceannotations.h>
using namespace vc_attributes;
void f([Pre(WritableElementsLength="pCLen") ] char *pC, char *pCLen);

void test_f()
{
  char pc[12]; 
  char buff[17];
  f(pc, buff); // warning 6202
  // code...
}

Для буферов, расположенных вне стека, создается предупреждение C6203.

См. также

Ссылки

C6386

C6203