[pulseaudio-commits] src/pulse

Tanu Kaskinen tanuk at kemper.freedesktop.org
Fri Mar 28 05:55:54 PDT 2014


 src/pulse/util.c |   32 ++++++++++++++++++++++----------
 1 file changed, 22 insertions(+), 10 deletions(-)

New commits:
commit aca30527e2f8241b52433a81f7e857b726d5093c
Author: Tanu Kaskinen <tanu.kaskinen at linux.intel.com>
Date:   Wed Mar 19 12:16:08 2014 +0200

    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 6656bc3..50f90b8 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) {



More information about the pulseaudio-commits mailing list