q3map2: fix crash if command-line argument is missing

Running `q3map2 -fs_forbiddenpath -v mapname.map` would crash because
-v gets replaced with NULL in main().

Running `q3map2 -threads` would crash because missing next argument
for number of threads.
This commit is contained in:
Zack Middleton
2019-07-24 01:11:58 -05:00
committed by Garux
parent 9c60ebea68
commit c9a33917e3
2 changed files with 21 additions and 15 deletions

View File

@@ -86,14 +86,16 @@ int main( int argc, char **argv ){
/* -help */
if ( !strcmp( argv[ i ], "-h" ) || !strcmp( argv[ i ], "--help" )
|| !strcmp( argv[ i ], "-help" ) ) {
HelpMain( argv[i+1] );
HelpMain( ( i + 1 < argc ) ? argv[ i + 1 ] : NULL );
return 0;
}
/* -connect */
if ( !strcmp( argv[ i ], "-connect" ) ) {
argv[ i ] = NULL;
i++;
if ( ++i >= argc || !argv[ i ] ) {
Error( "Out of arguments: No address specified after %s", argv[ i - 1 ] );
}
argv[ i - 1 ] = NULL;
Broadcast_Setup( argv[ i ] );
argv[ i ] = NULL;
}
@@ -114,8 +116,10 @@ int main( int argc, char **argv ){
/* patch subdivisions */
else if ( !strcmp( argv[ i ], "-subdivisions" ) ) {
argv[ i ] = NULL;
i++;
if ( ++i >= argc || !argv[ i ] ) {
Error( "Out of arguments: No value specified after %s", argv[ i - 1 ] );
}
argv[ i - 1 ] = NULL;
patchSubdivisions = atoi( argv[ i ] );
argv[ i ] = NULL;
if ( patchSubdivisions <= 0 ) {
@@ -125,8 +129,10 @@ int main( int argc, char **argv ){
/* threads */
else if ( !strcmp( argv[ i ], "-threads" ) ) {
argv[ i ] = NULL;
i++;
if ( ++i >= argc || !argv[ i ] ) {
Error( "Out of arguments: No value specified after %s", argv[ i - 1 ] );
}
argv[ i - 1 ] = NULL;
numthreads = atoi( argv[ i ] );
argv[ i ] = NULL;
}

View File

@@ -412,7 +412,7 @@ void InitPaths( int *argc, char **argv ){
/* -game */
if ( strcmp( argv[ i ], "-game" ) == 0 ) {
if ( ++i >= *argc ) {
if ( ++i >= *argc || !argv[ i ] ) {
Error( "Out of arguments: No game specified after %s", argv[ i - 1 ] );
}
argv[ i - 1 ] = NULL;
@@ -425,7 +425,7 @@ void InitPaths( int *argc, char **argv ){
/* -fs_forbiddenpath */
else if ( strcmp( argv[ i ], "-fs_forbiddenpath" ) == 0 ) {
if ( ++i >= *argc ) {
if ( ++i >= *argc || !argv[ i ] ) {
Error( "Out of arguments: No path specified after %s.", argv[ i - 1 ] );
}
argv[ i - 1 ] = NULL;
@@ -439,7 +439,7 @@ void InitPaths( int *argc, char **argv ){
/* -fs_basepath */
else if ( strcmp( argv[ i ], "-fs_basepath" ) == 0 ) {
if ( ++i >= *argc ) {
if ( ++i >= *argc || !argv[ i ] ) {
Error( "Out of arguments: No path specified after %s.", argv[ i - 1 ] );
}
argv[ i - 1 ] = NULL;
@@ -449,7 +449,7 @@ void InitPaths( int *argc, char **argv ){
/* -fs_game */
else if ( strcmp( argv[ i ], "-fs_game" ) == 0 ) {
if ( ++i >= *argc ) {
if ( ++i >= *argc || !argv[ i ] ) {
Error( "Out of arguments: No path specified after %s.", argv[ i - 1 ] );
}
argv[ i - 1 ] = NULL;
@@ -459,7 +459,7 @@ void InitPaths( int *argc, char **argv ){
/* -fs_home */
else if ( strcmp( argv[ i ], "-fs_home" ) == 0 ) {
if ( ++i >= *argc ) {
if ( ++i >= *argc || !argv[ i ] ) {
Error( "Out of arguments: No path specified after %s.", argv[ i - 1 ] );
}
argv[ i - 1 ] = NULL;
@@ -469,7 +469,7 @@ void InitPaths( int *argc, char **argv ){
/* -fs_homebase */
else if ( strcmp( argv[ i ], "-fs_homebase" ) == 0 ) {
if ( ++i >= *argc ) {
if ( ++i >= *argc || !argv[ i ] ) {
Error( "Out of arguments: No path specified after %s.", argv[ i - 1 ] );
}
argv[ i - 1 ] = NULL;
@@ -479,7 +479,7 @@ void InitPaths( int *argc, char **argv ){
/* -fs_homepath - sets both of them */
else if ( strcmp( argv[ i ], "-fs_homepath" ) == 0 ) {
if ( ++i >= *argc ) {
if ( ++i >= *argc || !argv[ i ] ) {
Error( "Out of arguments: No path specified after %s.", argv[ i - 1 ] );
}
argv[ i - 1 ] = NULL;
@@ -490,7 +490,7 @@ void InitPaths( int *argc, char **argv ){
/* -fs_pakpath */
else if ( strcmp( argv[ i ], "-fs_pakpath" ) == 0 ) {
if ( ++i >= *argc ) {
if ( ++i >= *argc || !argv[ i ] ) {
Error( "Out of arguments: No path specified after %s.", argv[ i - 1 ] );
}
argv[ i - 1 ] = NULL;