Sync with 2.39.4

* maint-2.39: (38 commits)
  Git 2.39.4
  fsck: warn about symlink pointing inside a gitdir
  core.hooksPath: add some protection while cloning
  init.templateDir: consider this config setting protected
  clone: prevent hooks from running during a clone
  Add a helper function to compare file contents
  init: refactor the template directory discovery into its own function
  find_hook(): refactor the `STRIP_EXTENSION` logic
  clone: when symbolic links collide with directories, keep the latter
  entry: report more colliding paths
  t5510: verify that D/F confusion cannot lead to an RCE
  submodule: require the submodule path to contain directories only
  clone_submodule: avoid using `access()` on directories
  submodules: submodule paths must not contain symlinks
  clone: prevent clashing git dirs when cloning submodule in parallel
  t7423: add tests for symlinked submodule directories
  has_dir_name(): do not get confused by characters < '/'
  docs: document security issues around untrusted .git dirs
  upload-pack: disable lazy-fetching by default
  fetch/clone: detect dubious ownership of local repositories
  ...
This commit is contained in:
Johannes Schindelin
2024-04-12 09:45:28 +02:00
44 changed files with 1307 additions and 123 deletions

View File

@@ -1201,6 +1201,34 @@ test_expect_success 'very long name in the index handled sanely' '
test $len = 4098
'
# D/F conflict checking uses an optimization when adding to the end.
# make sure it does not get confused by `a-` sorting _between_
# `a` and `a/`.
test_expect_success 'more update-index D/F conflicts' '
# empty the index to make sure our entry is last
git read-tree --empty &&
cacheinfo=100644,$(test_oid empty_blob) &&
git update-index --add --cacheinfo $cacheinfo,path5/a &&
test_must_fail git update-index --add --cacheinfo $cacheinfo,path5/a/file &&
test_must_fail git update-index --add --cacheinfo $cacheinfo,path5/a/b/file &&
test_must_fail git update-index --add --cacheinfo $cacheinfo,path5/a/b/c/file &&
# "a-" sorts between "a" and "a/"
git update-index --add --cacheinfo $cacheinfo,path5/a- &&
test_must_fail git update-index --add --cacheinfo $cacheinfo,path5/a/file &&
test_must_fail git update-index --add --cacheinfo $cacheinfo,path5/a/b/file &&
test_must_fail git update-index --add --cacheinfo $cacheinfo,path5/a/b/c/file &&
cat >expected <<-\EOF &&
path5/a
path5/a-
EOF
git ls-files >actual &&
test_cmp expected actual
'
test_expect_success 'test_must_fail on a failing git command' '
test_must_fail git notacommand
'