]> git.ipfire.org Git - thirdparty/git.git/commitdiff
setup_git_directory(): handle UNC root paths correctly
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Sat, 24 Aug 2019 22:10:46 +0000 (15:10 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 26 Aug 2019 17:03:41 +0000 (10:03 -0700)
When working in the root directory of a file share (this is only
possible in Git Bash and Powershell, but not in CMD), the current
directory is reported without a trailing slash.

This is different from Unix and standard Windows directories: both / and
C:\ are reported with a trailing slash as current directories.

If a Git worktree is located there, Git is not quite prepared for that:
while it does manage to find the .git directory/file, it returns as
length of the top-level directory's path *one more* than the length of
the current directory, and setup_git_directory_gently() would then
return an undefined string as prefix.

In practice, this undefined string usually points to NUL bytes, and does
not cause much harm. Under rare circumstances that are really involved
to reproduce (and not reliably so), the reported prefix could be a
suffix string of Git's exec path, though.

A careful analysis determined that this bug is unlikely to be
exploitable, therefore we mark this as a regular bug fix.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
setup.c

diff --git a/setup.c b/setup.c
index a0cb42c2356fed92815694391b5020e7f25d769f..03efbb274a682c039e28ca46f09b34de08587f47 100644 (file)
--- a/setup.c
+++ b/setup.c
@@ -797,7 +797,7 @@ static const char *setup_discovered_git_dir(const char *gitdir,
                set_git_dir(gitdir);
        inside_git_dir = 0;
        inside_work_tree = 1;
-       if (offset == cwd->len)
+       if (offset >= cwd->len)
                return NULL;
 
        /* Make "offset" point past the '/' (already the case for root dirs) */