mirror of
https://github.com/git/git.git
synced 2024-11-27 20:14:30 +08:00
update-index: refuse to add working tree items beyond symlinks
When "sym" is a symbolic link that is inside the working tree, and it points at a directory "dir" that has "path" in it, "update-index --add sym/path" used to mistakenly add "sym/path" as if "sym" were a normal directory. "git apply", "git diff" and "git merge" have been taught about this issue some time ago, but "update-index" and "add" have been left ignorant for too long. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
fba5279db9
commit
806d13b1cc
@ -194,6 +194,10 @@ static int process_path(const char *path)
|
||||
int len;
|
||||
struct stat st;
|
||||
|
||||
len = strlen(path);
|
||||
if (has_symlink_leading_path(len, path))
|
||||
return error("'%s' is beyond a symbolic link", path);
|
||||
|
||||
/*
|
||||
* First things first: get the stat information, to decide
|
||||
* what to do about the pathname!
|
||||
@ -201,7 +205,6 @@ static int process_path(const char *path)
|
||||
if (lstat(path, &st) < 0)
|
||||
return process_lstat_error(path, errno);
|
||||
|
||||
len = strlen(path);
|
||||
if (S_ISDIR(st.st_mode))
|
||||
return process_directory(path, len, &st);
|
||||
|
||||
|
20
t/t0055-beyond-symlinks.sh
Executable file
20
t/t0055-beyond-symlinks.sh
Executable file
@ -0,0 +1,20 @@
|
||||
#!/bin/sh
|
||||
|
||||
test_description='update-index refuses to add beyond symlinks'
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
test_expect_success setup '
|
||||
>a &&
|
||||
mkdir b &&
|
||||
ln -s b c &&
|
||||
>c/d &&
|
||||
git update-index --add a b/d
|
||||
'
|
||||
|
||||
test_expect_success 'update-index --add beyond symlinks' '
|
||||
test_must_fail git update-index --add c/d &&
|
||||
! ( git ls-files | grep c/d )
|
||||
'
|
||||
|
||||
test_done
|
Loading…
Reference in New Issue
Block a user