From: Yu Watanabe Date: Thu, 30 Nov 2017 17:19:44 +0000 (+0900) Subject: fs-util: chase_symlinks(): remove unnecessary slash at the head X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=19c4e17bdc255030e9a2ca67f1349eefdca414d2;p=elogind.git fs-util: chase_symlinks(): remove unnecessary slash at the head Before this, chase_symlinks("/../../foo/bar",...) returns //foo/bar. This removes the unnecessary slash at the head. --- diff --git a/src/basic/fs-util.c b/src/basic/fs-util.c index d63eeb1d2..df8ed643a 100644 --- a/src/basic/fs-util.c +++ b/src/basic/fs-util.c @@ -728,6 +728,10 @@ int chase_symlinks(const char *path, const char *original_root, unsigned flags, * what we got so far. But don't allow this if the remaining path contains "../ or "./" * or something else weird. */ + /* If done is "/", as first also contains slash at the head, then remove this redundant slash. */ + if (streq_ptr(done, "/")) + *done = '\0'; + if (!strextend(&done, first, todo, NULL)) return -ENOMEM; @@ -800,6 +804,10 @@ int chase_symlinks(const char *path, const char *original_root, unsigned flags, done = first; first = NULL; } else { + /* If done is "/", as first also contains slash at the head, then remove this redundant slash. */ + if (streq(done, "/")) + *done = '\0'; + if (!strextend(&done, first, NULL)) return -ENOMEM; }