C6277
warning C6277: NULL application name with an unquoted path in call to <function>: results in a security vulnerability if the path contains spaces
Это предупреждение означает, что параметр имени приложения имеет значение 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 );
}