mirror of
https://github.com/nzp-team/fteqw.git
synced 2025-02-27 22:00:58 +00:00
Buffer overflows are bad for you, m'kay?
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@3029 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
828b3e99ab
commit
24e178bc37
3 changed files with 18 additions and 10 deletions
|
@ -952,7 +952,7 @@ void SV_SaveInfos(vfsfile_t *f);
|
||||||
void Master_Heartbeat (void);
|
void Master_Heartbeat (void);
|
||||||
void Master_Packet (void);
|
void Master_Packet (void);
|
||||||
|
|
||||||
void SV_FixupName(char *in, char *out);
|
void SV_FixupName(char *in, char *out, unsigned int outlen);
|
||||||
|
|
||||||
//
|
//
|
||||||
// sv_init.c
|
// sv_init.c
|
||||||
|
|
|
@ -197,7 +197,7 @@ char cvargroup_servercontrol[] = "server control variables";
|
||||||
|
|
||||||
vfsfile_t *sv_fraglogfile;
|
vfsfile_t *sv_fraglogfile;
|
||||||
|
|
||||||
void SV_FixupName(char *in, char *out);
|
void SV_FixupName(char *in, char *out, unsigned int outlen);
|
||||||
void SV_AcceptClient (netadr_t adr, int userid, char *userinfo);
|
void SV_AcceptClient (netadr_t adr, int userid, char *userinfo);
|
||||||
void Master_Shutdown (void);
|
void Master_Shutdown (void);
|
||||||
void PR_SetPlayerClass(client_t *cl, int classnum, qboolean fromqc);
|
void PR_SetPlayerClass(client_t *cl, int classnum, qboolean fromqc);
|
||||||
|
@ -1754,7 +1754,7 @@ client_t *SVC_DirectConnect(void)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
SV_FixupName(name, name);
|
SV_FixupName(name, name, sizeof(name));
|
||||||
|
|
||||||
if (!*name)
|
if (!*name)
|
||||||
{
|
{
|
||||||
|
@ -3642,14 +3642,20 @@ void Master_Shutdown (void)
|
||||||
#define iswhite(c) (c == ' ' || c == INVIS_CHAR1 || c == INVIS_CHAR2 || c == INVIS_CHAR3)
|
#define iswhite(c) (c == ' ' || c == INVIS_CHAR1 || c == INVIS_CHAR2 || c == INVIS_CHAR3)
|
||||||
#define isinvalid(c) (c == '\r' || c == '\n')
|
#define isinvalid(c) (c == '\r' || c == '\n')
|
||||||
//is allowed to shorten, out must be as long as in and min of "unnamed"+1
|
//is allowed to shorten, out must be as long as in and min of "unnamed"+1
|
||||||
void SV_FixupName(char *in, char *out)
|
void SV_FixupName(char *in, char *out, unsigned int outlen)
|
||||||
{
|
{
|
||||||
char *s, *p;
|
char *s, *p;
|
||||||
|
unsigned int len;
|
||||||
|
|
||||||
|
if (outlen == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
len = outlen;
|
||||||
|
|
||||||
s = out;
|
s = out;
|
||||||
while(iswhite(*in) || isinvalid(*in))
|
while(iswhite(*in) || isinvalid(*in))
|
||||||
in++;
|
in++;
|
||||||
while(*in)
|
while(*in && len > 0)
|
||||||
{
|
{
|
||||||
if (isinvalid(*in))
|
if (isinvalid(*in))
|
||||||
{
|
{
|
||||||
|
@ -3657,13 +3663,15 @@ void SV_FixupName(char *in, char *out)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
*s++ = *in++;
|
*s++ = *in++;
|
||||||
|
len--;
|
||||||
}
|
}
|
||||||
*s = '\0';
|
*s = '\0';
|
||||||
|
|
||||||
if (!*out)
|
if (!*out)
|
||||||
{ //reached end and it was all whitespace
|
{ //reached end and it was all whitespace
|
||||||
//white space only
|
//white space only
|
||||||
strcpy(out, "unnamed");
|
strncpy(out, "unnamed", outlen);
|
||||||
|
out[outlen-1] = 0;
|
||||||
p = out;
|
p = out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3756,7 +3764,7 @@ void SV_ExtractFromUserinfo (client_t *cl)
|
||||||
|
|
||||||
if (cl->protocol != SCP_BAD || *val)
|
if (cl->protocol != SCP_BAD || *val)
|
||||||
{
|
{
|
||||||
SV_FixupName(val, newname);
|
SV_FixupName(val, newname, sizeof(newname));
|
||||||
if (strlen(newname) > 40)
|
if (strlen(newname) > 40)
|
||||||
newname[40] = 0;
|
newname[40] = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -480,7 +480,7 @@ void Rank_AddUser_f (void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SV_FixupName(name, name);
|
SV_FixupName(name, name, sizeof(name));
|
||||||
|
|
||||||
if (!Rank_OpenRankings())
|
if (!Rank_OpenRankings())
|
||||||
{
|
{
|
||||||
|
@ -563,7 +563,7 @@ void Rank_SetPass_f (void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SV_FixupName(name, name);
|
SV_FixupName(name, name, sizeof(name));
|
||||||
|
|
||||||
id = rankfileheader.leader;
|
id = rankfileheader.leader;
|
||||||
while(id)
|
while(id)
|
||||||
|
@ -592,7 +592,7 @@ int Rank_GetPass (char *name)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
SV_FixupName(name, name);
|
SV_FixupName(name, name, sizeof(name));
|
||||||
|
|
||||||
id = rankfileheader.leader;
|
id = rankfileheader.leader;
|
||||||
while(id)
|
while(id)
|
||||||
|
|
Loading…
Reference in a new issue