engine: netchan: append .ztmp extension instead of replacing original extension
* so we don't send wrong file that has same name but different extension * validate filename size so it won't get truncated in fragbuf_t
This commit is contained in:
parent
0d2e8333e8
commit
ea21438637
1 changed files with 11 additions and 6 deletions
|
@ -919,13 +919,20 @@ int Netchan_CreateFileFragments( netchan_t *chan, const char *filename )
|
||||||
int remaining;
|
int remaining;
|
||||||
int bufferid = 1;
|
int bufferid = 1;
|
||||||
fs_offset_t filesize = 0;
|
fs_offset_t filesize = 0;
|
||||||
char compressedfilename[MAX_OSPATH];
|
|
||||||
int compressedFileTime;
|
int compressedFileTime;
|
||||||
int fileTime;
|
int fileTime;
|
||||||
qboolean firstfragment = true;
|
qboolean firstfragment = true;
|
||||||
qboolean bCompressed = false;
|
qboolean bCompressed = false;
|
||||||
fragbufwaiting_t *wait, *p;
|
fragbufwaiting_t *wait, *p;
|
||||||
fragbuf_t *buf;
|
fragbuf_t *buf;
|
||||||
|
char compressedfilename[sizeof( buf->filename ) + 5];
|
||||||
|
|
||||||
|
// shouldn't be critical, but just in case
|
||||||
|
if( Q_strlen( filename ) > sizeof( buf->filename ) - 1 )
|
||||||
|
{
|
||||||
|
Con_Printf( S_WARN "Unable to transfer %s due to path length overflow\n", filename );
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if(( filesize = FS_FileSize( filename, false )) <= 0 )
|
if(( filesize = FS_FileSize( filename, false )) <= 0 )
|
||||||
{
|
{
|
||||||
|
@ -937,8 +944,7 @@ int Netchan_CreateFileFragments( netchan_t *chan, const char *filename )
|
||||||
chunksize = chan->pfnBlockSize( chan->client, FRAGSIZE_FRAG );
|
chunksize = chan->pfnBlockSize( chan->client, FRAGSIZE_FRAG );
|
||||||
else chunksize = FRAGMENT_MAX_SIZE; // fallback
|
else chunksize = FRAGMENT_MAX_SIZE; // fallback
|
||||||
|
|
||||||
Q_strncpy( compressedfilename, filename, sizeof( compressedfilename ));
|
Q_snprintf( compressedfilename, sizeof( compressedfilename ), "%s.ztmp", filename );
|
||||||
COM_ReplaceExtension( compressedfilename, ".ztmp", sizeof( compressedfilename ));
|
|
||||||
compressedFileTime = FS_FileTime( compressedfilename, false );
|
compressedFileTime = FS_FileTime( compressedfilename, false );
|
||||||
fileTime = FS_FileTime( filename, false );
|
fileTime = FS_FileTime( filename, false );
|
||||||
|
|
||||||
|
@ -1521,10 +1527,9 @@ void Netchan_TransmitBits( netchan_t *chan, int length, byte *data )
|
||||||
|
|
||||||
if( pbuf->iscompressed )
|
if( pbuf->iscompressed )
|
||||||
{
|
{
|
||||||
char compressedfilename[MAX_OSPATH];
|
char compressedfilename[sizeof( pbuf->filename ) + 5];
|
||||||
|
|
||||||
Q_strncpy( compressedfilename, pbuf->filename, sizeof( compressedfilename ));
|
Q_snprintf( compressedfilename, sizeof( compressedfilename ), "%s.ztmp", pbuf->filename );
|
||||||
COM_ReplaceExtension( compressedfilename, ".ztmp", sizeof( compressedfilename ));
|
|
||||||
file = FS_Open( compressedfilename, "rb", false );
|
file = FS_Open( compressedfilename, "rb", false );
|
||||||
}
|
}
|
||||||
else file = FS_Open( pbuf->filename, "rb", false );
|
else file = FS_Open( pbuf->filename, "rb", false );
|
||||||
|
|
Loading…
Add table
Reference in a new issue