mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-10 08:00:05 +00:00
(svn r26114) -Fix-ish: do our best to not get bit by getenv being unsafe as hell
This commit is contained in:
parent
43f76dcabb
commit
d2ffba07bb
@ -1097,20 +1097,33 @@ void DetermineBasePaths(const char *exe)
|
||||
#ifdef __HAIKU__
|
||||
BPath path;
|
||||
find_directory(B_USER_SETTINGS_DIRECTORY, &path);
|
||||
const char *homedir = path.Path();
|
||||
const char *homedir = strdup(path.Path());
|
||||
#else
|
||||
/* getenv is highly unsafe; duplicate it as soon as possible,
|
||||
* or at least before something else touches the environment
|
||||
* variables in any way. It can also contain all kinds of
|
||||
* unvalidated data we rather not want internally. */
|
||||
const char *homedir = getenv("HOME");
|
||||
if (homedir != NULL) {
|
||||
homedir = strndup(homedir, MAX_PATH);
|
||||
}
|
||||
|
||||
if (homedir == NULL) {
|
||||
const struct passwd *pw = getpwuid(getuid());
|
||||
homedir = (pw == NULL) ? "" : pw->pw_dir;
|
||||
homedir = (pw == NULL) ? NULL : strdup(pw->pw_dir);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (homedir != NULL) {
|
||||
ValidateString(homedir);
|
||||
snprintf(tmp, MAX_PATH, "%s" PATHSEP "%s", homedir, PERSONAL_DIR);
|
||||
AppendPathSeparator(tmp, MAX_PATH);
|
||||
|
||||
_searchpaths[SP_PERSONAL_DIR] = strdup(tmp);
|
||||
free(homedir);
|
||||
} else {
|
||||
_searchpaths[SP_PERSONAL_DIR] = NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(WITH_SHARED_DIR)
|
||||
|
Loading…
Reference in New Issue
Block a user