C6277
경고 C6277: <function>에 대한 호출에서 따옴표가 없는 경로와 함께 NULL 응용 프로그램 이름을 사용했습니다. 이 경우 경로에 공백이 포함되어 있으면 보안 문제가 발생할 수 있습니다.
이 경고는 응용 프로그램 이름 매개 변수가 null이고 실행 파일 경로 이름에 공백이 있을 수 있음을 나타냅니다.이 경우 실행 파일 이름이 "정규화"되어 있지 않으면 보안 문제가 발생할 수 있습니다.즉, 악의적 사용자가 경로 앞부분에 이름이 같은 악의적 실행 파일을 삽입할 수 있습니다.이 경고를 해결하려면 null을 전달하는 대신 응용 프로그램 이름을 지정하거나 응용 프로그램 이름으로 null을 전달해야 하는 경우라면 실행 파일 경로 앞뒤에 따옴표를 사용합니다.
예제
다음 샘플 코드에서는 응용 프로그램 이름 매개 변수가 null이고 실행 파일 경로 이름에 공백이 있으므로 이 경고가 생성됩니다. 이것은 함수가 공백을 구문 분석하는 방식으로 인해 다른 실행 파일이 실행될 위험이 있기 때문입니다.자세한 내용은 CreateProcess를 참조하십시오.
#include <windows.h>
#include <stdio.h>
void f_defective()
{
STARTUPINFOA si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof( si ) );
si.cb = sizeof( si );
ZeroMemory( &pi, sizeof( pi ) );
if( !CreateProcessA( NULL,
"C:\\Program Files\\MyApp",
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi ) )
{
puts( "CreateProcess failed." );
return;
}
// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
이 경고를 해결하려면 다음 예제에서 볼 수 있는 것처럼 실행 파일 경로 앞뒤에 따옴표를 사용합니다.
#include <windows.h>
#include <stdio.h>
void f ()
{
STARTUPINFOA si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof( si ) );
si.cb = sizeof( si );
ZeroMemory( &pi, sizeof( pi ) );
if( !CreateProcessA( NULL,
"\"C:\\Program Files\\MyApp.exe\"",
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi ) )
{
puts( "CreateProcess failed." );
return;
}
// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}