@matheusbsbs / matheus-bagliano / commits / 3296766eb5
Fork 0

get_pathspec(): die when an out-of-tree path is given

An earlier commit d089ebaa (setup: sanitize absolute and funny paths) made get_pathspec() aware of absolute paths, but with a botched interface that forced the callers to count the resulting pathspecs in order to detect an error of giving a path that is outside the work tree. This fixes it, by dying inside the function. We had ls-tree test that relied on a misfeature in the original implementation of its pathspec handling. Leading slashes were silently removed from them. However we allow giving absolute pathnames (people want to cut and paste from elsewhere) that are inside work tree these days, so a pathspec that begin with slash _should_ be treated as a full path. The test is adjusted to match the updated rule for get_pathspec(). Earlier I mistook three tests given by Robin that they should succeed, but these are attempts to add path outside work tree, which should fail loudly. These tests also have been fixed. Signed-off-by: Junio C Hamano <gitster@pobox.com>

Junio C Hamano committed Mar 6, 2008 at 23:18 UTC 3296766eb5531ef051ae392114de5d75556f5613
3 files changed +7 -4
setup.c
+2
@@ -202,6 +202,8 @@ const char **get_pathspec(const char *prefix, const char **pathspec)
202 const char *p = prefix_path(prefix, prefixlen, *src);
203 if (p)
204 *(dst++) = p;
205 + else
206 + exit(128); /* error message already given */
207 src++;
208 }
209 *dst = NULL;
t/t3101-ls-tree-dirname.sh
+1 -1
@@ -120,7 +120,7 @@ EOF
120 # having 1.txt and path3
121 test_expect_success \
122 'ls-tree filter odd names' \
123 - 'git ls-tree $tree 1.txt /1.txt //1.txt path3/1.txt /path3/1.txt //path3//1.txt path3 /path3/ path3// >current &&
123 + 'git ls-tree $tree 1.txt ./1.txt .//1.txt path3/1.txt path3/./1.txt path3 path3// >current &&
124 cat >expected <<\EOF &&
125 100644 blob X 1.txt
126 100644 blob X path3/1.txt
t/t7010-setup.sh
+4 -3
@@ -142,15 +142,16 @@ test_expect_success 'setup deeper work tree' '
142 test_expect_success 'add a directory outside the work tree' '(
143 cd tester &&
144 d1="$(cd .. ; pwd)" &&
145 - git add "$d1"
145 + test_must_fail git add "$d1"
146 )'
147
148 +
149 test_expect_success 'add a file outside the work tree, nasty case 1' '(
150 cd tester &&
151 f="$(pwd)x" &&
152 echo "$f" &&
153 touch "$f" &&
153 - git add "$f"
154 + test_must_fail git add "$f"
155 )'
156
157 test_expect_success 'add a file outside the work tree, nasty case 2' '(
@@ -158,7 +159,7 @@ test_expect_success 'add a file outside the work tree, nasty case 2' '(
159 f="$(pwd | sed "s/.$//")x" &&
160 echo "$f" &&
161 touch "$f" &&
161 - git add "$f"
162 + test_must_fail git add "$f"
163 )'
164
165 test_done