Skip to content

Commit 2ed26b3

Browse files
authored
Unix: copy path into a static variable to work on in Sys_Basename and Sys_Dirname. This prevents overwriting argv[0]. (#1183)
1 parent 247fe8b commit 2ed26b3

File tree

3 files changed

+12
-8
lines changed

3 files changed

+12
-8
lines changed

shared/sys/sys_public.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,8 @@ char *Sys_DefaultAppPath(void);
141141
#endif
142142

143143
char *Sys_DefaultHomePath(void);
144-
const char *Sys_Dirname( char *path );
145-
const char *Sys_Basename( char *path );
144+
const char *Sys_Dirname( const char *path );
145+
const char *Sys_Basename( const char *path );
146146

147147
bool Sys_PathCmp( const char *path1, const char *path2 );
148148

shared/sys/sys_unix.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -164,19 +164,23 @@ qboolean Sys_LowPhysicalMemory( void )
164164
Sys_Basename
165165
==================
166166
*/
167-
const char *Sys_Basename( char *path )
167+
const char *Sys_Basename( const char *path )
168168
{
169-
return basename( path );
169+
static char buf[ MAX_OSPATH ];
170+
Q_strncpyz( buf, path, sizeof(buf) );
171+
return basename( buf );
170172
}
171173

172174
/*
173175
==================
174176
Sys_Dirname
175177
==================
176178
*/
177-
const char *Sys_Dirname( char *path )
179+
const char *Sys_Dirname( const char *path )
178180
{
179-
return dirname( path );
181+
static char buf[ MAX_OSPATH ];
182+
Q_strncpyz( buf, path, sizeof(buf) );
183+
return dirname( buf );
180184
}
181185

182186
/*

shared/sys/sys_win32.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ static UINT timerResolution = 0;
3838
Sys_Basename
3939
==============
4040
*/
41-
const char *Sys_Basename( char *path )
41+
const char *Sys_Basename( const char *path )
4242
{
4343
static char base[ MAX_OSPATH ] = { 0 };
4444
int length;
@@ -68,7 +68,7 @@ const char *Sys_Basename( char *path )
6868
Sys_Dirname
6969
==============
7070
*/
71-
const char *Sys_Dirname( char *path )
71+
const char *Sys_Dirname( const char *path )
7272
{
7373
static char dir[ MAX_OSPATH ] = { 0 };
7474
int length;

0 commit comments

Comments
 (0)