C6202
Предупреждение C6202: переполнение буфера для <переменной>, которой, возможно, выделен стек, в вызове <функции>: длина <размер> превышает размер буфера <максимум>.
Данное предупреждение указывает, что параметр, который указывает на расположенный в стеке буфер известного размера, передается в функцию, копирующую больше байтов, чем размер буфера. Это приводит к переполнению буфера. В результате может возникнуть доступная для эксплойта уязвимость системы безопасности или сбой программы.
Пример
В следующем коде создаются предупреждения C6202 и C6386. Оба предупреждения указывают на проблему переполнения буфера, возникающую из-за передачи в функцию неверного параметра (sizeof intArray).
#include <memory.h>
void f( )
{
int intArray[5];
char charArray[5];
memset ((void *)charArray, 0, sizeof intArray);
// code ...
}
Для устранения этого предупреждения передайте правильный размер с помощью оператора sizeof charArray, как указано в следующем коде:
#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.