diff options
author | Tim Angus <tim@ngus.net> | 2006-08-14 21:11:20 +0000 |
---|---|---|
committer | Tim Angus <tim@ngus.net> | 2006-08-14 21:11:20 +0000 |
commit | 77c1837c789c50ed8fa80f6a862d33387e432125 (patch) | |
tree | 215051df23ce8287de47aba48fc685d009ffefe9 /src/qcommon | |
parent | 46c7999840ac513d69b98e3ded8d59869dbb2fb2 (diff) |
* Merged ioq3-r838
- OS X Universal Binary creation script
- OS X x86 support
- OS X vm support
- SDL video mode selection bug fix
- "Home directory" support on windows
- Windows SMP deadlock fix
- Improved JPEG quality (screenshots/video)
- AVIs recorded with \video command are now actually AVIs
- Usual assortment of ioq3 tweaks and fixes
Diffstat (limited to 'src/qcommon')
-rw-r--r-- | src/qcommon/cvar.c | 20 | ||||
-rw-r--r-- | src/qcommon/files.c | 23 | ||||
-rw-r--r-- | src/qcommon/q_shared.h | 3 | ||||
-rw-r--r-- | src/qcommon/qcommon.h | 4 | ||||
-rw-r--r-- | src/qcommon/vm_interpreted.c | 2 |
5 files changed, 49 insertions, 3 deletions
diff --git a/src/qcommon/cvar.c b/src/qcommon/cvar.c index a306d887..a4af1af0 100644 --- a/src/qcommon/cvar.c +++ b/src/qcommon/cvar.c @@ -162,6 +162,20 @@ void Cvar_VariableStringBuffer( const char *var_name, char *buffer, int bufsize } } +/* +============ +Cvar_Flags +============ +*/ +int Cvar_Flags(const char *var_name) +{ + cvar_t *var; + + if(! (var = Cvar_FindVar(var_name)) ) + return CVAR_NONEXISTENT; + else + return var->flags; +} /* ============ @@ -318,7 +332,11 @@ cvar_t *Cvar_Set2( const char *var_name, const char *value, qboolean force ) { value = var->resetString; } - if (!strcmp(value,var->string)) { + if((var->flags & CVAR_LATCH) && var->latchedString) { + if(!strcmp(value,var->latchedString)) + return var; + } + else if (!strcmp(value,var->string)) { return var; } // note what types of cvars have been modified (userinfo, archive, serverinfo, systeminfo) diff --git a/src/qcommon/files.c b/src/qcommon/files.c index 9e9d21d0..15e183a4 100644 --- a/src/qcommon/files.c +++ b/src/qcommon/files.c @@ -2564,6 +2564,23 @@ qboolean FS_idPak( char *pak, char *base ) { /* ================ +FS_idPak + +Check whether the string contains stuff like "../" to prevent directory traversal bugs +and return qtrue if it does. +================ +*/ + +qboolean FS_CheckDirTraversal(const char *checkdir) +{ + if(strstr(checkdir, "../") || strstr(checkdir, "..\\")) + return qtrue; + + return qfalse; +} + +/* +================ FS_ComparePaks ---------------- @@ -2611,7 +2628,7 @@ qboolean FS_ComparePaks( char *neededpaks, int len, qboolean dlstring ) { } // Make sure the server cannot make us write to non-quake3 directories. - if(strstr(fs_serverReferencedPakNames[i], "../") || strstr(fs_serverReferencedPakNames[i], "..\\")) + if(FS_CheckDirTraversal(fs_serverReferencedPakNames[i])) { Com_Printf("WARNING: Invalid download name %s\n", fs_serverReferencedPakNames[i]); continue; @@ -2802,6 +2819,10 @@ static void FS_Startup( const char *gameName ) { if (fs_basepath->string[0]) { FS_AddGameDirectory( fs_basepath->string, gameName ); } +#ifdef MACOS_X + // allow .app bundles to be placed along side base dir + FS_AddGameDirectory( ".", gameName ); +#endif // fs_homepath is somewhat particular to *nix systems, only add if relevant // NOTE: same filtering below for mods and basegame if (fs_basepath->string[0] && Q_stricmp(fs_homepath->string,fs_basepath->string)) { diff --git a/src/qcommon/q_shared.h b/src/qcommon/q_shared.h index 9ade94b5..8d84b3f7 100644 --- a/src/qcommon/q_shared.h +++ b/src/qcommon/q_shared.h @@ -810,6 +810,9 @@ default values. #define CVAR_CHEAT 512 // can not be changed if cheats are disabled #define CVAR_NORESTART 1024 // do not clear when a cvar_restart is issued +#define CVAR_SERVER_CREATED 2048 // cvar was created by a server the client connected to. +#define CVAR_NONEXISTENT 0xFFFFFFFF // Cvar doesn't exist. + // nothing outside the Cvar_*() functions should modify these fields! typedef struct cvar_s { char *name; diff --git a/src/qcommon/qcommon.h b/src/qcommon/qcommon.h index 9cb03b6f..bf20536d 100644 --- a/src/qcommon/qcommon.h +++ b/src/qcommon/qcommon.h @@ -474,6 +474,9 @@ char *Cvar_VariableString( const char *var_name ); void Cvar_VariableStringBuffer( const char *var_name, char *buffer, int bufsize ); // returns an empty string if not defined +int Cvar_Flags(const char *var_name); +// returns CVAR_NONEXISTENT if cvar doesn't exist or the flags of that particular CVAR. + void Cvar_CommandCompletion( void(*callback)(const char *s) ); // callback with each valid string @@ -644,6 +647,7 @@ void FS_PureServerSetLoadedPaks( const char *pakSums, const char *pakNames ); // separated checksums will be checked for files, with the // sole exception of .cfg files. +qboolean FS_CheckDirTraversal(const char *checkdir); qboolean FS_idPak( char *pak, char *base ); qboolean FS_ComparePaks( char *neededpaks, int len, qboolean dlstring ); diff --git a/src/qcommon/vm_interpreted.c b/src/qcommon/vm_interpreted.c index 44b6e5d3..3c52f421 100644 --- a/src/qcommon/vm_interpreted.c +++ b/src/qcommon/vm_interpreted.c @@ -853,7 +853,7 @@ nextInstruction2: opStack--; goto nextInstruction; case OP_BCOM: - opStack[-1] = ~ ((unsigned)r0); + *opStack = ~ ((unsigned)r0); goto nextInstruction; case OP_LSH: |