Sdílet prostřednictvím


C6277

upozornění C6277: název aplikace nabývá hodnoty null s nepopsanou cestou volání <function>: způsobí chybu zabezpečení, pokud cesta obsahuje mezery

Toto upozornění znamená, že parametr názvu aplikace nabývá hodnoty null a že v cestě ke spustitelnému souboru mohou být mezery.Pokud není v tomto případě spustitelný soubor "plně kvalifikovaný", je pravděpodobné, že se jedná o bezpečnostní problém.Uživatel se zlými úmysly může vložit škodlivý spustitelný soubor se stejným názvem do dřívějšího místa v cestě.Toto upozornění je možné opravit specifikováním názvu aplikace namísto předání hodnoty null nebo použít uvozovky kolem cesty ke spustitelnému souboru.

Příklad

Následující ukázkový kód generuje toto varování, protože parametr názvu aplikace a cesta ke spustitelnému souboru obsahuje mezeru. Tím pádem vzniká riziko, že bude spuštěn jiný spustitelný soubor kvůli způsobu, kterým tato funkce analyzuje mezery.Další informace naleznete v 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 );
}

Použitím uvozovek kolem cesty ke spustitelnému souboru je možné toto upozornění opravit, jak je znázorněno v následujícím příkladu:

#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 );
}