Mercurial > hg > early-roguelike
comparison arogue7/mdport.c @ 144:708bb2dea17c
arogue7, xrogue: prevent potential NULL dereferencing.
It is possible for getpwuid() to fail and return NULL. Various md_get*
functions now check for this.
| author | John "Elwin" Edwards |
|---|---|
| date | Mon, 18 May 2015 10:53:22 -0400 |
| parents | b786053d2f37 |
| children | aac28331e71d |
comparison
equal
deleted
inserted
replaced
| 143:7faf4568c295 | 144:708bb2dea17c |
|---|---|
| 233 #if !defined(_WIN32) && !defined(DJGPP) | 233 #if !defined(_WIN32) && !defined(DJGPP) |
| 234 struct passwd *pw; | 234 struct passwd *pw; |
| 235 | 235 |
| 236 pw = getpwuid(getuid()); | 236 pw = getpwuid(getuid()); |
| 237 | 237 |
| 238 l = pw->pw_name; | 238 if (pw != NULL) |
| 239 l = pw->pw_name; | |
| 239 #endif | 240 #endif |
| 240 | 241 |
| 241 if ((l == NULL) || (*l == '\0')) | 242 if ((l == NULL) || (*l == '\0')) |
| 242 if ( (l = getenv("USERNAME")) == NULL ) | 243 if ( (l = getenv("USERNAME")) == NULL ) |
| 243 if ( (l = getenv("LOGNAME")) == NULL ) | 244 if ( (l = getenv("LOGNAME")) == NULL ) |
| 264 #else | 265 #else |
| 265 char slash = '/'; | 266 char slash = '/'; |
| 266 struct passwd *pw; | 267 struct passwd *pw; |
| 267 pw = getpwuid(getuid()); | 268 pw = getpwuid(getuid()); |
| 268 | 269 |
| 269 h = pw->pw_dir; | 270 if (pw != NULL) |
| 270 | 271 { |
| 271 if (strcmp(h,"/") == 0) | 272 h = pw->pw_dir; |
| 272 h = NULL; | 273 if (strcmp(h,"/") == 0) |
| 274 h = NULL; | |
| 275 } | |
| 273 #endif | 276 #endif |
| 274 homedir[0] = 0; | 277 homedir[0] = 0; |
| 275 #ifdef _WIN32 | 278 #ifdef _WIN32 |
| 276 if(SUCCEEDED(SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL, 0, szPath))) | 279 if(SUCCEEDED(SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL, 0, szPath))) |
| 277 h = szPath; | 280 h = szPath; |
| 324 char *def = "C:\\COMMAND.COM"; | 327 char *def = "C:\\COMMAND.COM"; |
| 325 #else | 328 #else |
| 326 char *def = "/bin/sh"; | 329 char *def = "/bin/sh"; |
| 327 struct passwd *pw; | 330 struct passwd *pw; |
| 328 pw = getpwuid(getuid()); | 331 pw = getpwuid(getuid()); |
| 329 s = pw->pw_shell; | 332 if (pw != NULL) |
| 333 s = pw->pw_shell; | |
| 330 #endif | 334 #endif |
| 331 if ((s == NULL) || (*s == '\0')) | 335 if ((s == NULL) || (*s == '\0')) |
| 332 if ( (s = getenv("COMSPEC")) == NULL) | 336 if ( (s = getenv("COMSPEC")) == NULL) |
| 333 if ( (s = getenv("SHELL")) == NULL) | 337 if ( (s = getenv("SHELL")) == NULL) |
| 334 if ( (s = getenv("SystemRoot")) == NULL) | 338 if ( (s = getenv("SystemRoot")) == NULL) |
