Skip to content

Commit 5c5a4a1

Browse files
filip-hejsekdscho
authored andcommitted
t0411: add tests for cloning from partial repo
Cloning from a partial repository must not fetch missing objects into the partial repository, because that can lead to arbitrary code execution. Add a couple of test cases, pretending to the `upload-pack` command (and to that command only) that it is working on a repository owned by someone else. Helped-by: Jeff King <[email protected]> Signed-off-by: Filip Hejsek <[email protected]> Signed-off-by: Johannes Schindelin <[email protected]>
1 parent 9e06401 commit 5c5a4a1

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

t/t0411-clone-from-partial.sh

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#!/bin/sh
2+
3+
test_description='check that local clone does not fetch from promisor remotes'
4+
5+
. ./test-lib.sh
6+
7+
test_expect_success 'create evil repo' '
8+
git init tmp &&
9+
test_commit -C tmp a &&
10+
git -C tmp config uploadpack.allowfilter 1 &&
11+
git clone --filter=blob:none --no-local --no-checkout tmp evil &&
12+
rm -rf tmp &&
13+
14+
git -C evil config remote.origin.uploadpack \"\$TRASH_DIRECTORY/fake-upload-pack\" &&
15+
write_script fake-upload-pack <<-\EOF &&
16+
echo >&2 "fake-upload-pack running"
17+
>"$TRASH_DIRECTORY/script-executed"
18+
exit 1
19+
EOF
20+
export TRASH_DIRECTORY &&
21+
22+
# empty shallow file disables local clone optimization
23+
>evil/.git/shallow
24+
'
25+
26+
test_expect_failure 'local clone must not fetch from promisor remote and execute script' '
27+
rm -f script-executed &&
28+
test_must_fail git clone \
29+
--upload-pack="GIT_TEST_ASSUME_DIFFERENT_OWNER=true git-upload-pack" \
30+
evil clone1 2>err &&
31+
! grep "fake-upload-pack running" err &&
32+
test_path_is_missing script-executed
33+
'
34+
35+
test_expect_failure 'clone from file://... must not fetch from promisor remote and execute script' '
36+
rm -f script-executed &&
37+
test_must_fail git clone \
38+
--upload-pack="GIT_TEST_ASSUME_DIFFERENT_OWNER=true git-upload-pack" \
39+
"file://$(pwd)/evil" clone2 2>err &&
40+
! grep "fake-upload-pack running" err &&
41+
test_path_is_missing script-executed
42+
'
43+
44+
test_expect_failure 'fetch from file://... must not fetch from promisor remote and execute script' '
45+
rm -f script-executed &&
46+
test_must_fail git fetch \
47+
--upload-pack="GIT_TEST_ASSUME_DIFFERENT_OWNER=true git-upload-pack" \
48+
"file://$(pwd)/evil" 2>err &&
49+
! grep "fake-upload-pack running" err &&
50+
test_path_is_missing script-executed
51+
'
52+
53+
test_expect_success 'pack-objects should fetch from promisor remote and execute script' '
54+
rm -f script-executed &&
55+
echo "HEAD" | test_must_fail git -C evil pack-objects --revs --stdout >/dev/null 2>err &&
56+
grep "fake-upload-pack running" err &&
57+
test_path_is_file script-executed
58+
'
59+
60+
test_done

0 commit comments

Comments
 (0)