difftool: sanitize $workdir as early as possible
The double-slash fixup on the $workdir variable was being performed just-in-time to avoid double-slashes in symlink targets, but the rest of the code was silently using paths with embedded "//" in them. A recent user-reported error message contained double-slashes. Eliminate the issue by sanitizing inputs as soon as they arrive. Signed-off-by: David Aguilar <davvid@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
86defcbe3f
commit
e6e3e2a67c
@ -224,9 +224,7 @@ EOF
|
|||||||
delete($ENV{GIT_INDEX_FILE});
|
delete($ENV{GIT_INDEX_FILE});
|
||||||
|
|
||||||
# Changes in the working tree need special treatment since they are
|
# Changes in the working tree need special treatment since they are
|
||||||
# not part of the index. Remove any trailing slash from $workdir
|
# not part of the index.
|
||||||
# before starting to avoid double slashes in symlink targets.
|
|
||||||
$workdir =~ s|/$||;
|
|
||||||
for my $file (@working_tree) {
|
for my $file (@working_tree) {
|
||||||
my $dir = dirname($file);
|
my $dir = dirname($file);
|
||||||
unless (-d "$rdir/$dir") {
|
unless (-d "$rdir/$dir") {
|
||||||
@ -389,6 +387,7 @@ sub dir_diff
|
|||||||
my $repo = Git->repository();
|
my $repo = Git->repository();
|
||||||
my $repo_path = $repo->repo_path();
|
my $repo_path = $repo->repo_path();
|
||||||
my $workdir = $repo->wc_path();
|
my $workdir = $repo->wc_path();
|
||||||
|
$workdir =~ s|/$||; # Avoid double slashes in symlink targets
|
||||||
my ($a, $b, $tmpdir, @worktree) = setup_dir_diff($workdir, $symlinks);
|
my ($a, $b, $tmpdir, @worktree) = setup_dir_diff($workdir, $symlinks);
|
||||||
|
|
||||||
if (defined($extcmd)) {
|
if (defined($extcmd)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user