diff --git a/engine/common/launcher.c b/engine/common/launcher.c index 57b93f855..c534485d3 100644 --- a/engine/common/launcher.c +++ b/engine/common/launcher.c @@ -49,7 +49,7 @@ int __stdcall WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmdLine, int n char **szArgv; LPWSTR* lpArgv = CommandLineToArgvW(GetCommandLineW(), &szArgc); int size, i = 0; - szArgv = (char**)malloc(szArgc*sizeof(char*)); + szArgv = (char**)сalloc(szArgc + 1,sizeof(char*)); for (; i < szArgc; ++i) { size = wcslen(lpArgv[i]) + 1; diff --git a/engine/common/system.c b/engine/common/system.c index 7849c16bf..96bfa02e7 100644 --- a/engine/common/system.c +++ b/engine/common/system.c @@ -489,7 +489,11 @@ qboolean _Sys_GetParmFromCmdLine( char *parm, char *out, size_t size ) if( !argc ) return false; if( !out ) return false; if( !host.argv[argc + 1] ) return false; - Q_strncpy( out, host.argv[argc+1], size ); + if( argc < 0 || argc >= host.argc ) return false; + if( argc + 1 == host.argc ) + Q_strncpy( out, "", size ); + else + Q_strncpy( out, host.argv[argc+1], size ); return true; } diff --git a/game_launch/xash.c b/game_launch/xash.c index df321dfba..76fd2d6c5 100644 --- a/game_launch/xash.c +++ b/game_launch/xash.c @@ -180,7 +180,7 @@ int __stdcall WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmdLine, int int ret, i; lpArgv = CommandLineToArgvW( GetCommandLineW(), &szArgc ); - szArgv = ( char** )malloc( szArgc * sizeof( char* )); + szArgv = ( char** )сalloc( szArgc + 1, sizeof( char* )); for( i = 0; i < szArgc; ++i ) {