[PATCH] Handle double slashes in make_relative_path()
From: Thomas Rast <hidden>
Date: 2016-06-15 22:48:04
Subsystem:
the rest · Maintainer:
Linus Torvalds
If you say git --git-dir=/some//path --work-tree=/some/ add <somefile> then setup_work_tree() will call into make_relative_path() with abs="/some//path" and base="/some". (Note how the latter has already lost its trailing slash. One unfortunate user managed to trigger this because his $HOME ended in a slash.) This means that when checking whether 'abs' is a path under 'base', we need to skip *two* slashes where the previous code only accounted for one. Fix it to handle an arbitrary number of slashes at that position. Noticed-by: eldenz on freenode Signed-off-by: Thomas Rast <redacted> --- path.c | 6 +++--- t/t1501-worktree.sh | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/path.c b/path.c
index 2ec950b..a195bab 100644
--- a/path.c
+++ b/path.c@@ -400,10 +400,10 @@ int set_shared_perm(const char *path, int mode) baselen = strlen(base); if (prefixcmp(abs, base)) return abs; - if (abs[baselen] == '/') - baselen++; - else if (base[baselen - 1] != '/') + if (abs[baselen] != '/' && base[baselen - 1] != '/') return abs; + while (abs[baselen] == '/') + baselen++; strcpy(buf, abs + baselen); return buf; }
diff --git a/t/t1501-worktree.sh b/t/t1501-worktree.sh
index 74e6443..9df3012 100755
--- a/t/t1501-worktree.sh
+++ b/t/t1501-worktree.sh@@ -189,4 +189,10 @@ test_expect_success 'absolute pathspec should fail gracefully' ' ) ' +test_expect_success 'make_relative_path handles double slashes in GIT_DIR' ' + : > dummy_file + echo git --git-dir="$(pwd)//repo.git" --work-tree="$(pwd)" add dummy_file && + git --git-dir="$(pwd)//repo.git" --work-tree="$(pwd)" add dummy_file +' + test_done
--
1.6.6.1.532.g594fe