Skip to content

Commit b6ff2bc

Browse files
committed
All: Don't load .pk3s as .dlls, and don't load user config files from .pk3s
1 parent 1efb19a commit b6ff2bc

File tree

6 files changed

+30
-4
lines changed

6 files changed

+30
-4
lines changed

Diff for: MP/code/client/cl_main.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -3674,7 +3674,7 @@ void CL_InitRef( void ) {
36743674
Com_Printf( "----- Initializing Renderer ----\n" );
36753675

36763676
#ifdef USE_RENDERER_DLOPEN
3677-
cl_renderer = Cvar_Get("cl_renderer", "opengl1", CVAR_ARCHIVE | CVAR_LATCH);
3677+
cl_renderer = Cvar_Get("cl_renderer", "opengl1", CVAR_ARCHIVE | CVAR_LATCH | CVAR_PROTECTED);
36783678

36793679
Com_sprintf(dllName, sizeof(dllName), "renderer_mp_%s_" ARCH_STRING DLL_EXT, cl_renderer->string);
36803680

@@ -4014,7 +4014,7 @@ void CL_Init( void ) {
40144014

40154015
cl_allowDownload = Cvar_Get( "cl_allowDownload", "1", CVAR_ARCHIVE );
40164016
#ifdef USE_CURL_DLOPEN
4017-
cl_cURLLib = Cvar_Get("cl_cURLLib", DEFAULT_CURL_LIB, CVAR_ARCHIVE);
4017+
cl_cURLLib = Cvar_Get("cl_cURLLib", DEFAULT_CURL_LIB, CVAR_ARCHIVE | CVAR_PROTECTED);
40184018
#endif
40194019

40204020
// init autoswitch so the ui will have it correctly even

Diff for: MP/code/qcommon/files.c

+6
Original file line numberDiff line numberDiff line change
@@ -1424,12 +1424,18 @@ long FS_FOpenFileRead(const char *filename, fileHandle_t *file, qboolean uniqueF
14241424
{
14251425
searchpath_t *search;
14261426
long len;
1427+
qboolean isLocalConfig;
14271428

14281429
if(!fs_searchpaths)
14291430
Com_Error(ERR_FATAL, "Filesystem call made without initialization");
14301431

1432+
isLocalConfig = !strcmp(filename, "autoexec.cfg") || !strcmp(filename, Q3CONFIG_CFG);
14311433
for(search = fs_searchpaths; search; search = search->next)
14321434
{
1435+
// autoexec.cfg and wolfconfig_mp.cfg can only be loaded outside of pk3 files.
1436+
if (isLocalConfig && search->pack)
1437+
continue;
1438+
14331439
len = FS_FOpenFileReadDir(filename, search, file, uniqueFILE, qfalse);
14341440

14351441
if(file == NULL)

Diff for: MP/code/sys/sys_main.c

+7
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,13 @@ from executable path, then fs_basepath.
499499
void *Sys_LoadDll(const char *name, qboolean useSystemLib)
500500
{
501501
void *dllhandle;
502+
503+
// Don't load any DLLs that end with the pk3 extension
504+
if (COM_CompareExtension(name, ".pk3"))
505+
{
506+
Com_Printf("Rejecting DLL named \"%s\"", name);
507+
return NULL;
508+
}
502509

503510
if(useSystemLib)
504511
Com_Printf("Trying to load \"%s\"...\n", name);

Diff for: SP/code/client/cl_main.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -3348,7 +3348,7 @@ void CL_InitRef( void ) {
33483348
Com_Printf( "----- Initializing Renderer ----\n" );
33493349

33503350
#ifdef USE_RENDERER_DLOPEN
3351-
cl_renderer = Cvar_Get("cl_renderer", "opengl1", CVAR_ARCHIVE | CVAR_LATCH);
3351+
cl_renderer = Cvar_Get("cl_renderer", "opengl1", CVAR_ARCHIVE | CVAR_LATCH | CVAR_PROTECTED);
33523352

33533353
Com_sprintf(dllName, sizeof(dllName), "renderer_sp_%s_" ARCH_STRING DLL_EXT, cl_renderer->string);
33543354

@@ -3690,7 +3690,7 @@ void CL_Init( void ) {
36903690

36913691
cl_allowDownload = Cvar_Get( "cl_allowDownload", "0", CVAR_ARCHIVE );
36923692
#ifdef USE_CURL_DLOPEN
3693-
cl_cURLLib = Cvar_Get("cl_cURLLib", DEFAULT_CURL_LIB, CVAR_ARCHIVE);
3693+
cl_cURLLib = Cvar_Get("cl_cURLLib", DEFAULT_CURL_LIB, CVAR_ARCHIVE | CVAR_PROTECTED);
36943694
#endif
36953695

36963696
// init autoswitch so the ui will have it correctly even

Diff for: SP/code/qcommon/files.c

+6
Original file line numberDiff line numberDiff line change
@@ -1591,12 +1591,18 @@ long FS_FOpenFileRead(const char *filename, fileHandle_t *file, qboolean uniqueF
15911591
{
15921592
searchpath_t *search;
15931593
long len;
1594+
qboolean isLocalConfig;
15941595

15951596
if(!fs_searchpaths)
15961597
Com_Error(ERR_FATAL, "Filesystem call made without initialization");
15971598

1599+
isLocalConfig = !strcmp(filename, "autoexec.cfg") || !strcmp(filename, Q3CONFIG_CFG);
15981600
for(search = fs_searchpaths; search; search = search->next)
15991601
{
1602+
// autoexec.cfg and wolfconfig.cfg can only be loaded outside of pk3 files.
1603+
if (isLocalConfig && search->pack)
1604+
continue;
1605+
16001606
len = FS_FOpenFileReadDir(filename, search, file, uniqueFILE, qfalse);
16011607

16021608
if(file == NULL)

Diff for: SP/code/sys/sys_main.c

+7
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,13 @@ from executable path, then fs_basepath.
499499
void *Sys_LoadDll(const char *name, qboolean useSystemLib)
500500
{
501501
void *dllhandle;
502+
503+
// Don't load any DLLs that end with the pk3 extension
504+
if (COM_CompareExtension(name, ".pk3"))
505+
{
506+
Com_Printf("Rejecting DLL named \"%s\"", name);
507+
return NULL;
508+
}
502509

503510
if(useSystemLib)
504511
Com_Printf("Trying to load \"%s\"...\n", name);

0 commit comments

Comments
 (0)