Share via


C6029

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

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

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

예제

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

#include "windows.h"

bool f(HANDLE hFile)
{
    char buff[MAX_PATH];

    DWORD cbLen;
    DWORD cbRead;

    // Read the number of byte to read (cbLen).
    if (!ReadFile (hFile, &cbLen, sizeof (cbLen), &cbRead, NULL))  
    {
        return false;
    }
    // Read the bytes
    if (!ReadFile (hFile, buff, cbLen, &cbRead, NULL))  // warning 6029
    {
        return false;
    }

    return true;
}

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

bool f(HANDLE hFile)
{
    char buff[MAX_PATH];

    DWORD cbLen;
    DWORD cbRead;

    // Read the number of byte to read (cbLen).
    if (!ReadFile (hFile, &cbLen, sizeof (cbLen), &cbRead, NULL))  
    {
        return false;
    }
    // Ensure that there's enough space in the buffer to read that many bytes.
    if (cbLen > sizeof(buff))
    {
        return false;
    }
    // Read the bytes
    if (!ReadFile (hFile, buff, cbLen, &cbRead, NULL))  // warning 6029
    {
        return false;
    }

    return true;
}

참고 항목

개념

주석 개요