From: Tanu Kaskinen Date: Wed, 19 Mar 2014 10:16:08 +0000 (+0200) Subject: util: Check that the home dir is an absolute path X-Git-Url: https://code.delx.au/pulseaudio/commitdiff_plain/aca30527e2f8241b52433a81f7e857b726d5093c util: Check that the home dir is an absolute path Avoid unpredictable behaviour in case e.g. the HOME environment variable is incorrectly set up for whatever reason. I haven't seen non-absolute HOME anywhere, but this feels like a good sanity check anyway. --- diff --git a/src/pulse/util.c b/src/pulse/util.c index 6656bc3f..50f90b85 100644 --- a/src/pulse/util.c +++ b/src/pulse/util.c @@ -132,19 +132,23 @@ char *pa_get_host_name(char *s, size_t l) { char *pa_get_home_dir(char *s, size_t l) { char *e; -#ifdef HAVE_PWD_H char *dir; +#ifdef HAVE_PWD_H struct passwd *r; #endif pa_assert(s); pa_assert(l > 0); - if ((e = getenv("HOME"))) - return pa_strlcpy(s, e, l); + if ((e = getenv("HOME"))) { + dir = pa_strlcpy(s, e, l); + goto finish; + } - if ((e = getenv("USERPROFILE"))) - return pa_strlcpy(s, e, l); + if ((e = getenv("USERPROFILE"))) { + dir = pa_strlcpy(s, e, l); + goto finish; + } #ifdef HAVE_PWD_H errno = 0; @@ -158,13 +162,21 @@ char *pa_get_home_dir(char *s, size_t l) { dir = pa_strlcpy(s, r->pw_dir, l); pa_getpwuid_free(r); +#endif /* HAVE_PWD_H */ - return dir; -#else /* HAVE_PWD_H */ +finish: + if (!dir) { + errno = ENOENT; + return NULL; + } - errno = ENOENT; - return NULL; -#endif + if (!pa_is_path_absolute(dir)) { + pa_log("Failed to get the home directory, not an absolute path: %s", dir); + errno = ENOENT; + return NULL; + } + + return dir; } char *pa_get_binary_name(char *s, size_t l) {