Mercurial > hg > early-roguelike
diff urogue/mdport.c @ 270:7a96fede6cc8
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.
author | John "Elwin" Edwards |
---|---|
date | Wed, 01 Mar 2017 20:40:18 -0500 |
parents | c495a4f288c6 |
children | 1db299e868b8 |
line wrap: on
line diff
--- a/urogue/mdport.c Tue Feb 28 21:14:53 2017 -0500 +++ b/urogue/mdport.c Wed Mar 01 20:40:18 2017 -0500 @@ -244,7 +244,8 @@ pw = getpwuid(getuid()); - l = pw->pw_name; + if (pw != NULL) + l = pw->pw_name; #endif if ((l == NULL) || (*l == '\0')) @@ -275,7 +276,8 @@ 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 @@ 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 @@ #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);