From d76b06dcc2d1c11867633b4f95a148f7db68f064 Mon Sep 17 00:00:00 2001 From: s1lentq Date: Thu, 25 Aug 2022 00:01:33 +0700 Subject: [PATCH] Netchan_CreateFileFragments: Fixed a very old and rare bug with dlfile while downloading direct from server, when content of resource size is less than header size first fragment --- rehlds/engine/net_chan.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/rehlds/engine/net_chan.cpp b/rehlds/engine/net_chan.cpp index f11875c..94149bc 100644 --- a/rehlds/engine/net_chan.cpp +++ b/rehlds/engine/net_chan.cpp @@ -1158,7 +1158,10 @@ void Netchan_CreateFileFragmentsFromBuffer(qboolean server, netchan_t *chan, con MSG_WriteString(&buf->frag_message, filename); MSG_WriteString(&buf->frag_message, bCompressed ? "bz2" : "uncompressed"); MSG_WriteLong(&buf->frag_message, uncompressed_size); - send -= buf->frag_message.cursize; + + // Check if we aren't send more than we should + if ((chunksize - send) < buf->frag_message.cursize) + send -= buf->frag_message.cursize; } buf->isbuffer = TRUE; @@ -1321,7 +1324,7 @@ int Netchan_CreateFileFragments_(qboolean server, netchan_t *chan, const char *f remaining = filesize; pos = 0; - while (remaining) + while (remaining > 0) { send = min(chunksize, remaining); buf = Netchan_AllocFragbuf(); @@ -1353,7 +1356,10 @@ int Netchan_CreateFileFragments_(qboolean server, netchan_t *chan, const char *f MSG_WriteString(&buf->frag_message, filename); MSG_WriteString(&buf->frag_message, bCompressed ? "bz2" : "uncompressed"); MSG_WriteLong(&buf->frag_message, uncompressed_size); - send -= buf->frag_message.cursize; + + // Check if we aren't send more than we should + if ((chunksize - send) < buf->frag_message.cursize) + send -= buf->frag_message.cursize; } buf->isfile = TRUE; buf->iscompressed = bCompressed;