From 9a9c016baef51552c27176814849202c05626aaa Mon Sep 17 00:00:00 2001 From: "John \"Elwin\" Edwards" Date: Wed, 1 Mar 2017 20:40:18 -0500 Subject: [PATCH] UltraRogue: check the return value from getpwuid(). It is possible for getpwuid() to return NULL. Such a failure will no longer cause a segfault. However, the call to getpwuid() may normally not be reachable. --- urogue/mdport.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/urogue/mdport.c b/urogue/mdport.c index ae19272..827a6b9 100644 --- a/urogue/mdport.c +++ b/urogue/mdport.c @@ -244,7 +244,8 @@ md_getusername(int uid) pw = getpwuid(getuid()); - l = pw->pw_name; + if (pw != NULL) + l = pw->pw_name; #endif if ((l == NULL) || (*l == '\0')) @@ -275,7 +276,8 @@ md_gethomedir() struct passwd *pw; pw = getpwuid(getuid()); - h = pw->pw_dir; + if (pw != NULL) + h = pw->pw_dir; if (strcmp(h,"/") == 0) h = NULL; @@ -335,7 +337,8 @@ md_getshell() char *def = "/bin/sh"; struct passwd *pw; pw = getpwuid(getuid()); - s = pw->pw_shell; + if (pw != NULL) + s = pw->pw_shell; #endif if ((s == NULL) || (*s == '\0')) if ( (s = getenv("COMSPEC")) == NULL) @@ -455,13 +458,13 @@ md_getrealname(int uid) #if !defined(_WIN32) && !defined(DJGPP) struct passwd *pp; - if ((pp = getpwuid(uid)) == NULL) + if ((pp = getpwuid(uid)) == NULL) { sprintf(uidstr,"%d", uid); return(uidstr); } - else - return(pp->pw_name); + else + return(pp->pw_name); #else sprintf(uidstr,"%d", uid); return(uidstr);