- Modify color generating codes to only accept numbers and not alphabetical chars anymore
- Fix client clean name so that it cannot be tricked anymore, see https://bugzilla.icculus.org/show_bug.cgi?id=3313
This commit is contained in:
parent
96a3b4b169
commit
b433f3d01c
2 changed files with 51 additions and 77 deletions
|
@ -607,85 +607,59 @@ static void ForceClientSkin( gclient_t *client, char *model, const char *skin )
|
|||
ClientCheckName
|
||||
============
|
||||
*/
|
||||
static void ClientCleanName( const char *in, char *out, int outSize ) {
|
||||
int len, colorlessLen;
|
||||
char ch;
|
||||
char *p;
|
||||
int spaces;
|
||||
static void ClientCleanName(const char *in, char *out, int outSize)
|
||||
{
|
||||
int outpos = 0, colorlessLen = 0, spaces = 0;
|
||||
|
||||
//save room for trailing null byte
|
||||
outSize--;
|
||||
// discard leading spaces
|
||||
for(; *in == ' '; in++);
|
||||
|
||||
for(; *in && outpos < outSize - 1; in++)
|
||||
{
|
||||
out[outpos] = *in;
|
||||
|
||||
len = 0;
|
||||
colorlessLen = 0;
|
||||
p = out;
|
||||
*p = 0;
|
||||
spaces = 0;
|
||||
|
||||
while( 1 ) {
|
||||
ch = *in++;
|
||||
if( !ch ) {
|
||||
break;
|
||||
}
|
||||
|
||||
// don't allow leading spaces
|
||||
if( colorlessLen == 0 && ch == ' ' ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// check colors
|
||||
if( ch == Q_COLOR_ESCAPE ) {
|
||||
// solo trailing carat is not a color prefix
|
||||
if( !*in ) {
|
||||
break;
|
||||
}
|
||||
|
||||
// don't allow black in a name, period
|
||||
if( ColorIndex(*in) == 0 ) {
|
||||
in++;
|
||||
if(*in == ' ')
|
||||
{
|
||||
// don't allow too many consecutive spaces
|
||||
if(spaces > 2)
|
||||
continue;
|
||||
}
|
||||
|
||||
// make sure room in dest for both chars
|
||||
if( len > outSize - 2 ) {
|
||||
break;
|
||||
}
|
||||
|
||||
*out++ = ch;
|
||||
*out++ = *in++;
|
||||
len += 2;
|
||||
continue;
|
||||
}
|
||||
|
||||
// don't allow too many consecutive spaces
|
||||
// don't count spaces in colorlessLen
|
||||
if( ch == ' ' ) {
|
||||
|
||||
spaces++;
|
||||
if( spaces > 3 ) {
|
||||
continue;
|
||||
}
|
||||
if(outpos > 0 && out[outpos - 1] == Q_COLOR_ESCAPE)
|
||||
{
|
||||
if(Q_IsColorString(&out[outpos - 1]))
|
||||
{
|
||||
colorlessLen--;
|
||||
|
||||
if(*in == COLOR_BLACK)
|
||||
{
|
||||
// Disallow color black in names to prevent players
|
||||
// from getting advantage playing in front of black backgrounds
|
||||
outpos--;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
spaces = 0;
|
||||
colorlessLen++;
|
||||
}
|
||||
*out++ = ch;
|
||||
len++;
|
||||
continue;
|
||||
}
|
||||
else {
|
||||
else
|
||||
{
|
||||
spaces = 0;
|
||||
colorlessLen++;
|
||||
}
|
||||
|
||||
if( len > outSize - 1 ) {
|
||||
break;
|
||||
}
|
||||
|
||||
*out++ = ch;
|
||||
colorlessLen++;
|
||||
len++;
|
||||
|
||||
outpos++;
|
||||
}
|
||||
*out = 0;
|
||||
|
||||
out[outpos] = '\0';
|
||||
|
||||
// don't allow empty names
|
||||
if( *p == 0 || colorlessLen == 0 ) {
|
||||
Q_strncpyz( p, "UnnamedPlayer", outSize );
|
||||
}
|
||||
if( *out == '\0' || colorlessLen == 0)
|
||||
Q_strncpyz(out, "UnnamedPlayer", outSize );
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue