C6277

Actualización: noviembre 2007

C6277

Advertencia C6277: Nombre de la aplicación NULL con una ruta sin comillas en la llamada a <función>: dará como resultado una vulnerabilidad de acceso si la ruta contiene espacios

Esta advertencia indica que el parámetro de nombre de aplicación es null y podría haber espacios en el nombre de la ruta de acceso del archivo ejecutable. En este caso, a menos que el nombre ejecutable sea "completo", es probable que constituya un problema de seguridad. Un usuario malintencionado podría insertar un archivo ejecutable no autorizado con el mismo nombre en un punto anterior de la ruta de acceso. Para corregir esta advertencia, basta con que especifique el nombre de la aplicación en lugar de pasar null, o bien, si prefiere pasar null para el nombre de la aplicación, ponga la ruta de acceso del archivo ejecutables entre comillas.

Ejemplo

El siguiente código de ejemplo genera esta advertencia porque el parámetro de nombre de la aplicación es null y el nombre de la ruta de acceso del archivo ejecutable contiene un espacio; existe el riesgo de que se ejecute otro ejecutable distinto por la manera en que la función analiza los espacios. Para obtener más información, vea 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 );
}

Para corregir esta advertencia, utilice ponga la ruta de acceso del archivo ejecutable entre comillas, como se muestra en el ejemplo siguiente:

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