mirror of
https://github.com/UberGames/lilium-voyager.git
synced 2025-01-07 09:20:46 +00:00
- 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
|
ClientCheckName
|
||||||
============
|
============
|
||||||
*/
|
*/
|
||||||
static void ClientCleanName( const char *in, char *out, int outSize ) {
|
static void ClientCleanName(const char *in, char *out, int outSize)
|
||||||
int len, colorlessLen;
|
{
|
||||||
char ch;
|
int outpos = 0, colorlessLen = 0, spaces = 0;
|
||||||
char *p;
|
|
||||||
int spaces;
|
|
||||||
|
|
||||||
//save room for trailing null byte
|
// discard leading spaces
|
||||||
outSize--;
|
for(; *in == ' '; in++);
|
||||||
|
|
||||||
len = 0;
|
for(; *in && outpos < outSize - 1; in++)
|
||||||
colorlessLen = 0;
|
{
|
||||||
p = out;
|
out[outpos] = *in;
|
||||||
*p = 0;
|
|
||||||
spaces = 0;
|
|
||||||
|
|
||||||
while( 1 ) {
|
if(*in == ' ')
|
||||||
ch = *in++;
|
{
|
||||||
if( !ch ) {
|
// don't allow too many consecutive spaces
|
||||||
break;
|
if(spaces > 2)
|
||||||
}
|
|
||||||
|
|
||||||
// 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++;
|
|
||||||
continue;
|
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++;
|
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;
|
spaces = 0;
|
||||||
|
colorlessLen++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( len > outSize - 1 ) {
|
outpos++;
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
*out++ = ch;
|
|
||||||
colorlessLen++;
|
|
||||||
len++;
|
|
||||||
}
|
}
|
||||||
*out = 0;
|
|
||||||
|
out[outpos] = '\0';
|
||||||
|
|
||||||
// don't allow empty names
|
// don't allow empty names
|
||||||
if( *p == 0 || colorlessLen == 0 ) {
|
if( *out == '\0' || colorlessLen == 0)
|
||||||
Q_strncpyz( p, "UnnamedPlayer", outSize );
|
Q_strncpyz(out, "UnnamedPlayer", outSize );
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -365,20 +365,20 @@ extern vec4_t colorMdGrey;
|
||||||
extern vec4_t colorDkGrey;
|
extern vec4_t colorDkGrey;
|
||||||
|
|
||||||
#define Q_COLOR_ESCAPE '^'
|
#define Q_COLOR_ESCAPE '^'
|
||||||
#define Q_IsColorString(p) ( p && *(p) == Q_COLOR_ESCAPE && *((p)+1) && isalnum(*((p)+1)) ) // ^[0-9a-zA-Z]
|
#define Q_IsColorString(p) ((p) && *(p) == Q_COLOR_ESCAPE && *((p)+1) && *((p)+1) >= '0' && *((p)+1) <= '7') // ^[0-9a-zA-Z]
|
||||||
|
|
||||||
#define COLOR_BLACK '0'
|
#define COLOR_BLACK '0'
|
||||||
#define COLOR_RED '1'
|
#define COLOR_RED '1'
|
||||||
#define COLOR_GREEN '2'
|
#define COLOR_GREEN '2'
|
||||||
#define COLOR_YELLOW '3'
|
#define COLOR_YELLOW '3'
|
||||||
#define COLOR_BLUE '4'
|
#define COLOR_BLUE '4'
|
||||||
#define COLOR_CYAN '5'
|
#define COLOR_CYAN '5'
|
||||||
#define COLOR_MAGENTA '6'
|
#define COLOR_MAGENTA '6'
|
||||||
#define COLOR_WHITE '7'
|
#define COLOR_WHITE '7'
|
||||||
#define ColorIndex(c) ( ( (c) - '0' ) & 7 )
|
#define ColorIndex(c) ((c) - '0')
|
||||||
|
|
||||||
#define S_COLOR_BLACK "^0"
|
#define S_COLOR_BLACK "^0"
|
||||||
#define S_COLOR_RED "^1"
|
#define S_COLOR_RED "^1"
|
||||||
#define S_COLOR_GREEN "^2"
|
#define S_COLOR_GREEN "^2"
|
||||||
#define S_COLOR_YELLOW "^3"
|
#define S_COLOR_YELLOW "^3"
|
||||||
#define S_COLOR_BLUE "^4"
|
#define S_COLOR_BLUE "^4"
|
||||||
|
|
Loading…
Reference in a new issue