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


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.

См. также

Ссылки

C6202

C6386