From fa47ca0d2d6031f2d0fbf9e24015c032002010b9 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Mon, 21 Apr 2025 19:56:23 +0300 Subject: [PATCH] engine: system: make a copy of pw_name just in case --- engine/common/system.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/engine/common/system.c b/engine/common/system.c index 765a4d26..dc420335 100644 --- a/engine/common/system.c +++ b/engine/common/system.c @@ -126,6 +126,7 @@ returns username for current profile */ const char *Sys_GetCurrentUser( void ) { + // TODO: move to platform #if XASH_WIN32 static string s_userName; unsigned long size = sizeof( s_userName ); @@ -138,11 +139,15 @@ const char *Sys_GetCurrentUser( void ) if( COM_CheckStringEmpty( username )) return username; #elif XASH_POSIX && !XASH_ANDROID && !XASH_NSWITCH - uid_t uid = geteuid(); - struct passwd *pw = getpwuid( uid ); + static string username; + struct passwd *pw = getpwuid( geteuid( )); - if( pw ) - return pw->pw_name; + // POSIX standard says pw _might_ point to static area, so let's make a copy + if( pw && COM_CheckString( pw->pw_name )) + { + Q_strncpy( username, pw->pw_name, sizeof( username )); + return username; + } #endif return "Player"; }