diff options
author | Junio C Hamano <junkio@cox.net> | 2005-12-15 12:54:00 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2005-12-15 12:54:00 -0800 |
commit | 6677c4665af2d73f670bec382bc82d0f2e9513fb (patch) | |
tree | 7197059b14f5e6b820d2b8708434347160ef26e6 /t | |
parent | 8431c4eb0976b0558eaa1df475ce6de6b52ce484 (diff) | |
download | git-6677c4665af2d73f670bec382bc82d0f2e9513fb.tar.gz git-6677c4665af2d73f670bec382bc82d0f2e9513fb.tar.xz |
get_sha1_basic(): corner case ambiguity fix
When .git/refs/heads/frotz and .git/refs/tags/frotz existed, and
the object name stored in .git/refs/heads/frotz were corrupt, we
ended up picking tags/frotz without complaining. Worse yet, if
the corrupt .git/refs/heads/frotz was more than 40 bytes and
began with hexadecimal characters, it silently overwritten the
initial part of the returned result.
This commit adds a couple of tests to demonstrate these cases,
with a fix.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 't')
-rwxr-xr-x | t/t0000-basic.sh | 48 | ||||
-rwxr-xr-x | t/test-lib.sh | 1 |
2 files changed, 49 insertions, 0 deletions
diff --git a/t/t0000-basic.sh b/t/t0000-basic.sh index bc3e711a5..ffa723ea8 100755 --- a/t/t0000-basic.sh +++ b/t/t0000-basic.sh @@ -205,4 +205,52 @@ test_expect_success \ 'no diff after checkout and git-update-index --refresh.' \ 'git-diff-files >current && cmp -s current /dev/null' + +# extended sha1 parsing and ambiguity resolution + +GIT_AUTHOR_DATE='1995-01-29T16:00:00 -0800' +GIT_AUTHOR_EMAIL=a.u.thor@example.com +GIT_AUTHOR_NAME='A U Thor' +GIT_COMMITTER_DATE='1995-01-29T16:00:00 -0800' +GIT_COMMITTER_EMAIL=c.o.mmitter@example.com +GIT_COMMITTER_NAME='C O Mmitter' +export GIT_AUTHOR_DATE +export GIT_AUTHOR_EMAIL +export GIT_AUTHOR_NAME +export GIT_COMMITTER_DATE +export GIT_COMMITTER_EMAIL +export GIT_COMMITTER_NAME + +test_expect_success \ + 'initial commit.' \ + 'commit=$(echo Initial commit | git-commit-tree $tree) && + echo "$commit" >.git/refs/heads/master && + git-ls-tree HEAD && + test "$commit" = 51a092e9ef6cbbe66d258acd17599d3f80be6162' + +test_expect_success \ + 'Ambiguous' \ + 'echo "$commit" >.git/refs/heads/nasty && + echo "$commit" >.git/refs/tags/nasty && + if git-rev-parse --verify nasty + then + echo "should have barfed" + false + else + : + fi && + # names directly underneath .git/ should not interfere + echo "$commit" >.git/refs/heads/description && + git-rev-parse --verify description && + # broken object name + echo fffffffffffffffffffffffffffffffffffffffg \ + >.git/refs/heads/nasty && + if git-rev-parse --verify nasty + then + echo "should have barfed" + false + else + : + fi' + test_done diff --git a/t/test-lib.sh b/t/test-lib.sh index 2819bef1c..a97d259e2 100755 --- a/t/test-lib.sh +++ b/t/test-lib.sh @@ -18,6 +18,7 @@ unset GIT_ALTERNATE_OBJECT_DIRECTORIES unset GIT_AUTHOR_DATE unset GIT_AUTHOR_EMAIL unset GIT_AUTHOR_NAME +unset GIT_COMMITTER_DATE unset GIT_COMMITTER_EMAIL unset GIT_COMMITTER_NAME unset GIT_DIFF_OPTS |