From: Jonathan Nieder Date: Sat, 10 Mar 2012 04:07:22 +0000 (-0600) Subject: fast-import: don't allow 'ls' of path with empty components X-Git-Tag: v1.7.10-rc2~10^2 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=178e1deaae33f879ea687e85ac72455b3072b0d8;p=git.git fast-import: don't allow 'ls' of path with empty components As the fast-import manual explains: The value of must be in canonical form. That is it must not: . contain an empty directory component (e.g. foo//bar is invalid), . end with a directory separator (e.g. foo/ is invalid), . start with a directory separator (e.g. /foo is invalid), Unfortunately the "ls" command accepts these invalid syntaxes and responds by declaring that the indicated path is missing. This is too subtle and causes importers to silently misbehave; better to error out so the operator knows what's happening. The C, R, and M commands already error out for such paths. Reported-by: Andrew Sayers Analysis-by: David Barr Signed-off-by: Jonathan Nieder --- diff --git a/fast-import.c b/fast-import.c index fff285cd0..47f61f3cb 100644 --- a/fast-import.c +++ b/fast-import.c @@ -1640,6 +1640,8 @@ static int tree_content_get( n = slash1 - p; else n = strlen(p); + if (!n) + die("Empty path component found in input"); if (!root->tree) load_tree(root); diff --git a/t/t9300-fast-import.sh b/t/t9300-fast-import.sh index 6b1ba6c85..2cd0f0614 100755 --- a/t/t9300-fast-import.sh +++ b/t/t9300-fast-import.sh @@ -1087,6 +1087,45 @@ test_expect_success \ M 040000 $subdir file3/ INPUT_END' +test_expect_success \ + 'N: reject foo/ syntax in copy source' \ + 'test_must_fail git fast-import <<-INPUT_END + commit refs/heads/N5C + committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE + data < $GIT_COMMITTER_DATE + data < $GIT_COMMITTER_DATE + data <expect.foo &&