Share via


C6204

경고 C6204: <function>에 대한 호출에서 버퍼 오버런이 발생할 수 있습니다. 검사되지 않은 매개 변수 <variable>을(를) 사용했습니다.

이 경고는 분석 중인 함수에 대한 매개 변수의 가능한 값에 따라 스택 버퍼의 오버런을 발생시킬 수 있는 함수가 호출되었음을 나타냅니다. 이 오류로 인해 악용될 수 있는 버퍼 오버런이나 충돌이 발생할 수 있습니다.

코드뿐 아니라 이 함수에 대한 호출자를 검토하여 함수가 예기치 않은 데이터와 함께 호출될 가능성이 있는지를 확인하십시오. 모든 호출이 안전하다고 확신할 수 없는 경우에는 모든 입력 문자열의 길이를 검사하거나 적절한 속성으로 함수 매개 변수에 주석을 지정하여 함수에 대한 입력의 유효성을 검사하는 것이 좋습니다.

예제

다음 코드에서는 입력 매개 변수(pCh)에 잘못된 데이터가 포함될 수 있기 때문에 이 경고가 생성됩니다.

#include<string.h>

void f(char *pCh)
{
  char buff[10];
  strcpy(buff, pCh);
}

이 경고는 다음 코드에서처럼 크기에 대한 유효성을 검사하여 해결할 수 있습니다.

#include<string.h>

void f(char *pCh)
{ 
  char buff[10];
  if (strlen(pCh) >= sizeof buff)
    return;
  strcpy (buff, pCh);
}

위의 코드는 잘못된 포인터(pCh)가 전달될 경우 실패할 수 있습니다. 위의 코드를 더욱 유연하게 만들려면 다음 코드에서처럼 주석과 안전한 문자열 조작 함수를 사용하십시오.

#include<string.h>
#include <codeanalysis\sourceannotations.h>
void f([Pre(NullTerminated=SA_Yes, Null=SA_No)] char* pCh)
{
  char buff[15];
  if (strlen(pCh) > sizeof buff)
    return;
  strcpy_s(buff,sizeof(buff), pCh);
}

분석 도구에서 분석 중인 함수에 대해 가능한 모든 호출자 집합을 고려하지 않기 때문에 코드가 완벽하게 안전할 수 있습니다.

참고 항목

참조

strcpy_s, wcscpy_s, _mbscpy_s

개념

주석 개요