aboutsummaryrefslogtreecommitdiffstats
path: root/code/qcommon/files.c
diff options
context:
space:
mode:
Diffstat (limited to 'code/qcommon/files.c')
-rw-r--r--code/qcommon/files.c36
1 files changed, 35 insertions, 1 deletions
diff --git a/code/qcommon/files.c b/code/qcommon/files.c
index 64fe8d5..821de07 100644
--- a/code/qcommon/files.c
+++ b/code/qcommon/files.c
@@ -496,6 +496,24 @@ static qboolean FS_CreatePath (char *OSPath) {
/*
=================
+FS_FilenameIsExecutable
+
+ERR_FATAL if trying to maniuplate a file with the platform library extension
+=================
+ */
+static void FS_FilenameIsExecutable( const char *filename, const char *function )
+{
+ // Check if the filename ends with the library extension
+ if( !Q_stricmp( filename + strlen( filename ) - strlen( DLL_EXT ), DLL_EXT ) )
+ {
+ Com_Error( ERR_FATAL, "%s: Not allowed to write '%s' due to %s extension\n",
+ function, filename, DLL_EXT );
+ }
+}
+
+
+/*
+=================
FS_CopyFile
Copy a fully specified file from one place to another
@@ -508,6 +526,8 @@ static void FS_CopyFile( char *fromOSPath, char *toOSPath ) {
Com_Printf( "copy %s to %s\n", fromOSPath, toOSPath );
+ FS_FilenameIsExecutable( toOSPath, __FUNCTION__ );
+
if (strstr(fromOSPath, "journal.dat") || strstr(fromOSPath, "journaldata.dat")) {
Com_Printf( "Ignoring journal files\n");
return;
@@ -549,6 +569,8 @@ FS_Remove
===========
*/
void FS_Remove( const char *osPath ) {
+ FS_FilenameIsExecutable( osPath, __FUNCTION__ );
+
remove( osPath );
}
@@ -559,6 +581,8 @@ FS_HomeRemove
===========
*/
void FS_HomeRemove( const char *homePath ) {
+ FS_FilenameIsExecutable( homePath, __FUNCTION__ );
+
remove( FS_BuildOSPath( fs_homepath->string,
fs_gamedir, homePath ) );
}
@@ -636,6 +660,8 @@ fileHandle_t FS_SV_FOpenFileWrite( const char *filename ) {
Com_Printf( "FS_SV_FOpenFileWrite: %s\n", ospath );
}
+ FS_FilenameIsExecutable( ospath, __FUNCTION__ );
+
if( FS_CreatePath( ospath ) ) {
return 0;
}
@@ -745,6 +771,8 @@ void FS_SV_Rename( const char *from, const char *to ) {
Com_Printf( "FS_SV_Rename: %s --> %s\n", from_ospath, to_ospath );
}
+ FS_FilenameIsExecutable( to_ospath, __FUNCTION__ );
+
if (rename( from_ospath, to_ospath )) {
// Failed, try copying it and deleting the original
FS_CopyFile ( from_ospath, to_ospath );
@@ -777,6 +805,8 @@ void FS_Rename( const char *from, const char *to ) {
Com_Printf( "FS_Rename: %s --> %s\n", from_ospath, to_ospath );
}
+ FS_FilenameIsExecutable( to_ospath, __FUNCTION__ );
+
if (rename( from_ospath, to_ospath )) {
// Failed, try copying it and deleting the original
FS_CopyFile ( from_ospath, to_ospath );
@@ -838,6 +868,8 @@ fileHandle_t FS_FOpenFileWrite( const char *filename ) {
Com_Printf( "FS_FOpenFileWrite: %s\n", ospath );
}
+ FS_FilenameIsExecutable( ospath, __FUNCTION__ );
+
if( FS_CreatePath( ospath ) ) {
return 0;
}
@@ -884,6 +916,8 @@ fileHandle_t FS_FOpenFileAppend( const char *filename ) {
Com_Printf( "FS_FOpenFileAppend: %s\n", ospath );
}
+ FS_FilenameIsExecutable( ospath, __FUNCTION__ );
+
if( FS_CreatePath( ospath ) ) {
return 0;
}
@@ -3397,7 +3431,7 @@ int FS_FOpenFileByMode( const char *qpath, fileHandle_t *f, fsMode_t mode ) {
}
break;
default:
- Com_Error( ERR_FATAL, "FSH_FOpenFile: bad mode" );
+ Com_Error( ERR_FATAL, "FS_FOpenFileByMode: bad mode" );
return -1;
}