C6203
Обновлен: Ноябрь 2007
C6203
Предупреждение C6203. Переполнение буфера для буфера <переменная> при вызове <функция>: длина <размер> превышает размер буфера.
Данное предупреждение означает, что параметр, который указывает на буфер известного размера, расположенный вне стека, передается в функцию, копирующую больше байтов, чем размер буфера. Это приводит к переполнению буфера.
В результате может возникнуть уязвимость системы безопасности или сбой программы.
Пример
В следующем коде создаются предупреждения C6203 и C6386. Оба предупреждения указывают на проблему переполнения буфера, возникающую из-за передачи в функцию неверного параметра (sizeofintArray).
#include <memory.h>
void f( )
{
static char charArray[5];
static int intArray[5];
memset ((void *)charArray, 0, sizeof intArray);
// code ...
}
Для устранения этого предупреждения передайте правильный размер с помощью оператора sizeofcharArray, как указано в следующем коде:
void f( )
{
static char charArray[5];
memset ((void *)charArray, 0, sizeof charArray);
// code ...
}
В следующем коде параметр функции char *pC объявляется с помощью свойства WritableElementsLength. Фактическое количество записываемых элементов в параметре pC равно количеству элементов буфера char *pCLen. В данном случае предупреждение C6203 создается во время вызова, поскольку буфер pCLen содержит больше элементов, чем записываемый параметр pC.
#include <malloc.h>
#include <codeanalysis\sourceannotations.h>
using namespace vc_attributes;
void f([Pre(WritableElementsLength="pCLen")] char *pC, char *pCLen);
void test_f( )
{
char *pChar = ( char * ) malloc ( 10 );
char buff[15];
test_f ( pChar, buff ); // warning 6203
// code ...
}
Для буферов стека создается предупреждение C6202.