Share via


C6029

업데이트: 2007년 11월

C6029

경고 C6029: <function>을(를) 호출할 때 버퍼 오버런이 발생할 수 있습니다. 검사되지 않은 값을 사용했습니다.

이 경고는 버퍼와 크기를 사용하는 함수에서 검사되지 않은 크기를 전달하고 있음을 나타냅니다. 일부 외부 소스에서 읽어온 데이터가 버퍼 크기보다 작은지 여부를 확인하지 않았습니다. 공격자가 의도적으로 예상되는 크기보다 훨씬 큰 크기를 지정하면 버퍼 오버런이 발생할 수 있습니다.

일반적으로 신뢰할 수 없는 외부 소스에서 데이터를 읽을 때는 해당 데이터의 유효성을 검사해야 합니다. 크기를 확인하여 예상 범위 내에 있는지 확인하는 것이 좋습니다.

예제

다음 코드에서는 주석이 표시된 함수 ReadFile을 두 번 호출하여 이 경고를 생성합니다. 첫 번째 호출 후 Post 특성 속성에서는 두 번째 매개 변수 값을 신뢰할 수 없는 것으로 표시합니다. 따라서 다음 코드에서처럼 두 번째 호출에서 ReadFile에 신뢰할 수 없는 값을 전달하면 이 경고가 생성됩니다.

#include "windows.h"
void f(char *buff, DWORD cbLen, DWORD cbRead, HANDLE hFile)
{
  if (!ReadFile (hFile, &cbLen, sizeof (cbLen), &cbRead, NULL))  
  {
    // code ...
    if (!ReadFile (hFile, buff, cbLen, &cbRead, NULL))  // warning 6029
    {
      // code ...
    }
  }
}

이 경고를 해결하려면 다음 코드에서처럼 버퍼 크기를 검사합니다.

void f(char *buff, DWORD cbLen, DWORD cbRead, HANDLE hFile)
{
  if (!ReadFile (hFile, &cbLen, sizeof (cbLen), &cbRead, NULL))  
  {
    // code ...
    if (cbLen <= sizeof (buff))  // check length
    {
    // code ...  
      if (!ReadFile (hFile, buff, cbLen, &cbRead, NULL))  
      {
       // code ...
      }
    }
  }
}

참고 항목

개념

주석 개요