Fixed FS_OpenFile to only open regular files on filesystem. Fixes server crash with e.g. 'cmd download maps'
This commit is contained in:
parent
4c295390bf
commit
7a79a6b8df
11
src/files.c
11
src/files.c
|
@ -22,6 +22,8 @@
|
||||||
* 02111-1307, USA.
|
* 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -199,7 +201,7 @@ FS_FOpenFile
|
||||||
Finds the file in the search path.
|
Finds the file in the search path.
|
||||||
returns filesize and an open FILE *
|
returns filesize and an open FILE *
|
||||||
Used for streaming data out of either a pak file or
|
Used for streaming data out of either a pak file or
|
||||||
a seperate file.
|
a seperate file.<
|
||||||
===========
|
===========
|
||||||
*/
|
*/
|
||||||
int file_from_pak = 0;
|
int file_from_pak = 0;
|
||||||
|
@ -207,6 +209,7 @@ int file_from_pak = 0;
|
||||||
int FS_FOpenFile(char *filename, FILE **file){
|
int FS_FOpenFile(char *filename, FILE **file){
|
||||||
searchpath_t *search;
|
searchpath_t *search;
|
||||||
char netpath[MAX_OSPATH];
|
char netpath[MAX_OSPATH];
|
||||||
|
struct stat sbuf;
|
||||||
pack_t *pak;
|
pack_t *pak;
|
||||||
int i;
|
int i;
|
||||||
filelink_t *link;
|
filelink_t *link;
|
||||||
|
@ -250,8 +253,10 @@ int FS_FOpenFile(char *filename, FILE **file){
|
||||||
|
|
||||||
Com_sprintf(netpath, sizeof(netpath), "%s/%s", search->filename, filename);
|
Com_sprintf(netpath, sizeof(netpath), "%s/%s", search->filename, filename);
|
||||||
|
|
||||||
*file = fopen(netpath, "rb");
|
if(stat(netpath, &sbuf) == -1 || !S_ISREG(sbuf.st_mode))
|
||||||
if(!*file)
|
continue;
|
||||||
|
|
||||||
|
if((*file = fopen(netpath, "rb")) == NULL)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
Com_DPrintf("FindFile: %s\n", netpath);
|
Com_DPrintf("FindFile: %s\n", netpath);
|
||||||
|
|
Loading…
Reference in New Issue