mirror of
https://github.com/DrBeef/ioq3quest.git
synced 2024-11-26 22:11:18 +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
|
||||
============
|
||||
*/
|
||||
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 );
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -365,20 +365,20 @@ extern vec4_t colorMdGrey;
|
|||
extern vec4_t colorDkGrey;
|
||||
|
||||
#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_RED '1'
|
||||
#define COLOR_GREEN '2'
|
||||
#define COLOR_BLACK '0'
|
||||
#define COLOR_RED '1'
|
||||
#define COLOR_GREEN '2'
|
||||
#define COLOR_YELLOW '3'
|
||||
#define COLOR_BLUE '4'
|
||||
#define COLOR_CYAN '5'
|
||||
#define COLOR_BLUE '4'
|
||||
#define COLOR_CYAN '5'
|
||||
#define COLOR_MAGENTA '6'
|
||||
#define COLOR_WHITE '7'
|
||||
#define ColorIndex(c) ( ( (c) - '0' ) & 7 )
|
||||
#define COLOR_WHITE '7'
|
||||
#define ColorIndex(c) ((c) - '0')
|
||||
|
||||
#define S_COLOR_BLACK "^0"
|
||||
#define S_COLOR_RED "^1"
|
||||
#define S_COLOR_RED "^1"
|
||||
#define S_COLOR_GREEN "^2"
|
||||
#define S_COLOR_YELLOW "^3"
|
||||
#define S_COLOR_BLUE "^4"
|
||||
|
|
Loading…
Reference in a new issue