Don't allow modifying qvms or pk3s

Exception for allowing pk3s to be downloaded.
This commit is contained in:
Zack Middleton 2013-04-24 14:11:18 -05:00
parent 8270d54a25
commit 936db459ee
4 changed files with 13 additions and 9 deletions

View file

@ -304,7 +304,7 @@ void CL_cURL_PerformDownload(void)
} }
FS_FCloseFile(clc.download); FS_FCloseFile(clc.download);
if(msg->msg == CURLMSG_DONE && msg->data.result == CURLE_OK) { if(msg->msg == CURLMSG_DONE && msg->data.result == CURLE_OK) {
FS_SV_Rename(clc.downloadTempName, clc.downloadName); FS_SV_Rename(clc.downloadTempName, clc.downloadName, qfalse);
clc.downloadRestart = qtrue; clc.downloadRestart = qtrue;
} }
else { else {

View file

@ -637,7 +637,7 @@ void CL_ParseDownload ( msg_t *msg ) {
clc.download = 0; clc.download = 0;
// rename the file // rename the file
FS_SV_Rename ( clc.downloadTempName, clc.downloadName ); FS_SV_Rename ( clc.downloadTempName, clc.downloadName, qfalse );
} }
// send intentions now // send intentions now

View file

@ -554,17 +554,19 @@ qboolean FS_CreatePath (char *OSPath) {
================= =================
FS_CheckFilenameIsNotExecutable FS_CheckFilenameIsNotExecutable
ERR_FATAL if trying to maniuplate a file with the platform library extension ERR_FATAL if trying to maniuplate a file with the platform library, QVM, or pk3 extension
================= =================
*/ */
static void FS_CheckFilenameIsNotExecutable( const char *filename, static void FS_CheckFilenameIsNotExecutable( const char *filename,
const char *function ) const char *function )
{ {
// Check if the filename ends with the library extension // Check if the filename ends with the library, QVM, or pk3 extension
if(COM_CompareExtension(filename, DLL_EXT)) if( COM_CompareExtension( filename, DLL_EXT )
|| COM_CompareExtension( filename, ".qvm" )
|| COM_CompareExtension( filename, ".pk3" ) )
{ {
Com_Error( ERR_FATAL, "%s: Not allowed to manipulate '%s' due " Com_Error( ERR_FATAL, "%s: Not allowed to manipulate '%s' due "
"to %s extension", function, filename, DLL_EXT ); "to %s extension", function, filename, COM_GetExtension( filename ) );
} }
} }
@ -765,7 +767,7 @@ FS_SV_Rename
=========== ===========
*/ */
void FS_SV_Rename( const char *from, const char *to ) { void FS_SV_Rename( const char *from, const char *to, qboolean safe ) {
char *from_ospath, *to_ospath; char *from_ospath, *to_ospath;
if ( !fs_searchpaths ) { if ( !fs_searchpaths ) {
@ -784,7 +786,9 @@ void FS_SV_Rename( const char *from, const char *to ) {
Com_Printf( "FS_SV_Rename: %s --> %s\n", from_ospath, to_ospath ); Com_Printf( "FS_SV_Rename: %s --> %s\n", from_ospath, to_ospath );
} }
FS_CheckFilenameIsNotExecutable( to_ospath, __func__ ); if ( safe ) {
FS_CheckFilenameIsNotExecutable( to_ospath, __func__ );
}
rename(from_ospath, to_ospath); rename(from_ospath, to_ospath);
} }

View file

@ -641,7 +641,7 @@ fileHandle_t FS_FCreateOpenPipeFile( const char *filename );
fileHandle_t FS_SV_FOpenFileWrite( const char *filename ); fileHandle_t FS_SV_FOpenFileWrite( const char *filename );
long FS_SV_FOpenFileRead( const char *filename, fileHandle_t *fp ); long FS_SV_FOpenFileRead( const char *filename, fileHandle_t *fp );
void FS_SV_Rename( const char *from, const char *to ); void FS_SV_Rename( const char *from, const char *to, qboolean safe );
long FS_FOpenFileRead( const char *qpath, fileHandle_t *file, qboolean uniqueFILE ); long FS_FOpenFileRead( const char *qpath, fileHandle_t *file, qboolean uniqueFILE );
// if uniqueFILE is true, then a new FILE will be fopened even if the file // if uniqueFILE is true, then a new FILE will be fopened even if the file
// is found in an already open pak file. If uniqueFILE is false, you must call // is found in an already open pak file. If uniqueFILE is false, you must call