summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristopher Schwarz <lakitu7@gmail.com>2009-10-03 12:42:33 +0000
committerTim Angus <tim@ngus.net>2013-01-03 00:16:10 +0000
commite61ff637eb96470e297875a975c6c2ec5b4e48cd (patch)
treecb6f02d63ad18185569a26374296fcd9ea23938c /src
parent072babaf3ad07e65560db7861f8fe91bdbe1456a (diff)
* Cleanup info_validate function and enforce that connecting clients must pass it (with thanks to Byron Johnson)
Diffstat (limited to 'src')
-rw-r--r--src/game/g_client.c7
-rw-r--r--src/qcommon/q_shared.c20
2 files changed, 21 insertions, 6 deletions
diff --git a/src/game/g_client.c b/src/game/g_client.c
index 7246a25a..912e9dd9 100644
--- a/src/game/g_client.c
+++ b/src/game/g_client.c
@@ -996,7 +996,12 @@ void ClientUserinfoChanged( int clientNum )
// check for malformed or illegal info strings
if( !Info_Validate(userinfo) )
- strcpy( userinfo, "\\name\\badinfo" );
+ {
+ trap_SendServerCommand( ent - g_entities,
+ "disconnect \"illegal or malformed userinfo\n\"" );
+ trap_DropClient( ent - g_entities,
+ "dropped: illegal or malformed userinfo");
+ }
// stickyspec toggle
s = Info_ValueForKey( userinfo, "cg_stickySpec" );
diff --git a/src/qcommon/q_shared.c b/src/qcommon/q_shared.c
index fc259219..07e3669c 100644
--- a/src/qcommon/q_shared.c
+++ b/src/qcommon/q_shared.c
@@ -1234,12 +1234,22 @@ can mess up the server's parsing
==================
*/
qboolean Info_Validate( const char *s ) {
- if ( strchr( s, '\"' ) ) {
- return qfalse;
- }
- if ( strchr( s, ';' ) ) {
- return qfalse;
+ const char* ch = s;
+
+ while ( *ch != '\0' )
+ {
+ if( !Q_isprint( *ch ) )
+ return qfalse;
+
+ if( *ch == '\"' )
+ return qfalse;
+
+ if( *ch == ';' )
+ return qfalse;
+
+ ++ch;
}
+
return qtrue;
}