Mercurial > hg > early-roguelike
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 269:a413bc97d3ea | 270:7a96fede6cc8 |
|---|---|
| 242 #if !defined(_WIN32) && !defined(DJGPP) | 242 #if !defined(_WIN32) && !defined(DJGPP) |
| 243 struct passwd *pw; | 243 struct passwd *pw; |
| 244 | 244 |
| 245 pw = getpwuid(getuid()); | 245 pw = getpwuid(getuid()); |
| 246 | 246 |
| 247 l = pw->pw_name; | 247 if (pw != NULL) |
| 248 l = pw->pw_name; | |
| 248 #endif | 249 #endif |
| 249 | 250 |
| 250 if ((l == NULL) || (*l == '\0')) | 251 if ((l == NULL) || (*l == '\0')) |
| 251 if ( (l = getenv("USERNAME")) == NULL ) | 252 if ( (l = getenv("USERNAME")) == NULL ) |
| 252 if ( (l = getenv("LOGNAME")) == NULL ) | 253 if ( (l = getenv("LOGNAME")) == NULL ) |
| 273 #else | 274 #else |
| 274 char slash = '/'; | 275 char slash = '/'; |
| 275 struct passwd *pw; | 276 struct passwd *pw; |
| 276 pw = getpwuid(getuid()); | 277 pw = getpwuid(getuid()); |
| 277 | 278 |
| 278 h = pw->pw_dir; | 279 if (pw != NULL) |
| 280 h = pw->pw_dir; | |
| 279 | 281 |
| 280 if (strcmp(h,"/") == 0) | 282 if (strcmp(h,"/") == 0) |
| 281 h = NULL; | 283 h = NULL; |
| 282 #endif | 284 #endif |
| 283 homedir[0] = 0; | 285 homedir[0] = 0; |
| 333 char *def = "C:\\COMMAND.COM"; | 335 char *def = "C:\\COMMAND.COM"; |
| 334 #else | 336 #else |
| 335 char *def = "/bin/sh"; | 337 char *def = "/bin/sh"; |
| 336 struct passwd *pw; | 338 struct passwd *pw; |
| 337 pw = getpwuid(getuid()); | 339 pw = getpwuid(getuid()); |
| 338 s = pw->pw_shell; | 340 if (pw != NULL) |
| 341 s = pw->pw_shell; | |
| 339 #endif | 342 #endif |
| 340 if ((s == NULL) || (*s == '\0')) | 343 if ((s == NULL) || (*s == '\0')) |
| 341 if ( (s = getenv("COMSPEC")) == NULL) | 344 if ( (s = getenv("COMSPEC")) == NULL) |
| 342 if ( (s = getenv("SHELL")) == NULL) | 345 if ( (s = getenv("SHELL")) == NULL) |
| 343 if ( (s = getenv("SystemRoot")) == NULL) | 346 if ( (s = getenv("SystemRoot")) == NULL) |
| 453 { | 456 { |
| 454 static char uidstr[20]; | 457 static char uidstr[20]; |
| 455 #if !defined(_WIN32) && !defined(DJGPP) | 458 #if !defined(_WIN32) && !defined(DJGPP) |
| 456 struct passwd *pp; | 459 struct passwd *pp; |
| 457 | 460 |
| 458 if ((pp = getpwuid(uid)) == NULL) | 461 if ((pp = getpwuid(uid)) == NULL) |
| 459 { | 462 { |
| 460 sprintf(uidstr,"%d", uid); | 463 sprintf(uidstr,"%d", uid); |
| 461 return(uidstr); | 464 return(uidstr); |
| 462 } | 465 } |
| 463 else | 466 else |
| 464 return(pp->pw_name); | 467 return(pp->pw_name); |
| 465 #else | 468 #else |
| 466 sprintf(uidstr,"%d", uid); | 469 sprintf(uidstr,"%d", uid); |
| 467 return(uidstr); | 470 return(uidstr); |
| 468 #endif | 471 #endif |
| 469 } | 472 } |
