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-Tag: v236~70^2~6 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a1904a46630694d65ba333418cf0c9590598f3e5;p=thirdparty%2Fsystemd.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 475400177a6..3fe5c7cf133 100644 --- a/src/basic/fs-util.c +++ b/src/basic/fs-util.c @@ -722,6 +722,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; @@ -794,6 +798,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; }