Share via


C6203

경고 C6203: <function>에 대한 호출에서 버퍼 <variable>에 대해 버퍼 오버런이 발생했습니다. 길이 <size>이(가) 버퍼 크기를 초과합니다.

이 경고는 크기를 알고 있는 비스택 버퍼를 가리키는 매개 변수가 이 크기보다 큰 바이트를 복사하는 함수로 전달되고 있음을 나타냅니다. 이 경우 버퍼 오버런이 발생합니다.

이 오류로 인해 악용될 수 있는 보안 허점이나 프로그램 충돌이 발생할 수 있습니다.

예제

다음 코드에서는 경고 C6203 및 C6386을 생성합니다. 함수에 잘못된 매개 변수(sizeof intArray)가 전달되기 때문에 두 경고 모두 버퍼 오버런 문제를 나타냅니다.

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

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

두 경고를 모두 해결하려면 다음 코드에서처럼 sizeof charArray를 사용하여 올바른 크기를 전달하십시오.

void f( )
{
  static char charArray[5];
   
  memset ((void *)charArray, 0, sizeof charArray);
  // code ...
}

다음 코드에서는 WritableElementsLength 속성을 사용하여 함수 매개 변수 char *pC에 주석을 지정합니다. pC에서 쓰기 가능한 실제 요소 수는 버퍼 char *pCLen의 요소 수입니다. 이 경우 pCLen에는 쓰기 가능한 매개 변수 pC보다 많은 요소가 있기 때문에 호출 사이트에서 경고 C6203이 발생합니다.

#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