Another change to server parsing as a server reporting in from 69.79.84.0/24 with the master server could screw up the server list in ioquake3 clients.

This commit is contained in:
Thilo Schulz 2008-04-12 19:53:16 +00:00
parent 845de6a960
commit c281b6aca0

View file

@ -1843,7 +1843,6 @@ void CL_ServersResponsePacket( netadr_t from, msg_t *msg ) {
int numservers;
byte* buffptr;
byte* buffend;
netadrtype_t family = NA_IP;
Com_Printf("CL_ServersResponsePacket\n");
@ -1857,46 +1856,42 @@ void CL_ServersResponsePacket( netadr_t from, msg_t *msg ) {
numservers = 0;
buffptr = msg->data;
buffend = buffptr + msg->cursize;
while (buffptr+1 < buffend)
{
// advance to initial token
do
{
if(*buffptr == '\\' || *buffptr == '/')
break;
buffptr++;
} while (buffptr < buffend);
while (buffptr + 1 < buffend)
{
if (*buffptr == '\\')
{
family = NA_IP;
break;
}
else if(*buffptr == '/')
{
family = NA_IP6;
break;
}
buffptr++;
}
while (buffptr < buffend);
buffptr++;
if(family == NA_IP)
{
if (buffend - buffptr < sizeof(addresses[numservers].ip) + sizeof(addresses[numservers].port) + sizeof("\\EOT") - 1)
if (buffend - buffptr < sizeof(addresses[numservers].ip) + sizeof(addresses[numservers].port) + 1)
break;
for(i = 0; i < sizeof(addresses[numservers].ip); i++)
addresses[numservers].ip[i] = *buffptr++;
addresses[numservers].type = NA_IP;
}
else
{
if (buffend - buffptr < sizeof(addresses[numservers].ip6) + sizeof(addresses[numservers].port) + sizeof("\\EOT") - 1)
buffptr++;
if (buffend - buffptr < sizeof(addresses[numservers].ip6) + sizeof(addresses[numservers].port) + 1)
break;
for(i = 0; i < sizeof(addresses[numservers].ip6); i++)
addresses[numservers].ip6[i] = *buffptr++;
}
addresses[numservers].type = family;
addresses[numservers].type = NA_IP6;
}
// parse out port
addresses[numservers].port = (*buffptr++) << 8;
@ -1912,8 +1907,9 @@ void CL_ServersResponsePacket( netadr_t from, msg_t *msg ) {
break;
// parse out EOT
if (buffptr[1] == 'E' && buffptr[2] == 'O' && buffptr[3] == 'T')
break;
// not anymore.. as servers from 69.79.84.0/24 can screw up the server list with this.
// if (buffptr[1] == 'E' && buffptr[2] == 'O' && buffptr[3] == 'T')
// break;
}
count = cls.numglobalservers;