summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/client/cl_curl.c2
-rw-r--r--src/client/cl_parse.c2
-rw-r--r--src/qcommon/files.c16
-rw-r--r--src/qcommon/qcommon.h2
4 files changed, 13 insertions, 9 deletions
diff --git a/src/client/cl_curl.c b/src/client/cl_curl.c
index ffc35557..8d083877 100644
--- a/src/client/cl_curl.c
+++ b/src/client/cl_curl.c
@@ -305,7 +305,7 @@ void CL_cURL_PerformDownload(void)
}
FS_FCloseFile(clc.download);
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;
}
else {
diff --git a/src/client/cl_parse.c b/src/client/cl_parse.c
index 675c6855..d69af295 100644
--- a/src/client/cl_parse.c
+++ b/src/client/cl_parse.c
@@ -628,7 +628,7 @@ void CL_ParseDownload ( msg_t *msg ) {
clc.download = 0;
// rename the file
- FS_SV_Rename ( clc.downloadTempName, clc.downloadName );
+ FS_SV_Rename ( clc.downloadTempName, clc.downloadName, qfalse );
}
// send intentions now
diff --git a/src/qcommon/files.c b/src/qcommon/files.c
index a9c43b43..f3e4ba70 100644
--- a/src/qcommon/files.c
+++ b/src/qcommon/files.c
@@ -532,17 +532,19 @@ qboolean FS_CreatePath (char *OSPath) {
=================
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,
const char *function )
{
- // Check if the filename ends with the library extension
- if(COM_CompareExtension(filename, DLL_EXT))
+ // Check if the filename ends with the library, QVM, or pk3 extension
+ 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 "
- "to %s extension", function, filename, DLL_EXT );
+ "to %s extension", function, filename, COM_GetExtension( filename ) );
}
}
@@ -743,7 +745,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;
if ( !fs_searchpaths ) {
@@ -762,7 +764,9 @@ void FS_SV_Rename( const char *from, const char *to ) {
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);
}
diff --git a/src/qcommon/qcommon.h b/src/qcommon/qcommon.h
index 6f235ee9..bf195ec7 100644
--- a/src/qcommon/qcommon.h
+++ b/src/qcommon/qcommon.h
@@ -622,7 +622,7 @@ fileHandle_t FS_FCreateOpenPipeFile( const char *filename );
fileHandle_t FS_SV_FOpenFileWrite( const char *filename );
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 );
// 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