Added overflow checks in Netchan_CopyNormalFragments

This commit is contained in:
WPMGPRoSToTeMa 2015-07-16 09:56:19 +03:00
parent 6a819c8683
commit a3b651e54b

View File

@ -1399,16 +1399,41 @@ qboolean Netchan_CopyNormalFragments(netchan_t *chan)
SZ_Clear(&net_message);
MSG_BeginReading();
#ifdef REHLDS_FIXES
bool overflowed = false;
#endif // REHLDS_FIXES
while (p)
{
n = p->next;
#ifdef REHLDS_FIXES
if (net_message.cursize + p->frag_message.cursize <= net_message.maxsize)
SZ_Write(&net_message, p->frag_message.data, p->frag_message.cursize);
else
overflowed = true;
#else // REHLDS_FIXES
SZ_Write(&net_message, p->frag_message.data, p->frag_message.cursize);
#endif // REHLDS_FIXES
Mem_Free(p);
p = n;
}
#ifdef REHLDS_FIXES
if (overflowed)
{
Con_Printf("Netchan_CopyNormalFragments: Overflowed\n");
SZ_Clear(&net_message);
chan->incomingbufs[FRAG_NORMAL_STREAM] = NULL;
chan->incomingready[FRAG_NORMAL_STREAM] = false;
return FALSE;
}
#endif // REHLDS_FIXES
if (*(uint32 *)net_message.data == MAKEID('B', 'Z', '2', '\0'))
{
char uncompressed[65536];