]> git.ipfire.org Git - thirdparty/git.git/commit
clone_submodule: avoid using `access()` on directories
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Fri, 12 Apr 2024 19:00:44 +0000 (21:00 +0200)
committerJohannes Schindelin <johannes.schindelin@gmx.de>
Wed, 17 Apr 2024 20:30:03 +0000 (22:30 +0200)
commiteafffd9ad417bdf0a3c63e5276d5a18f563cd291
tree70ff5a94ec5161480c751ad39256fc7f47b56846
parent97065761333fd62db1912d81b489db938d8c991d
clone_submodule: avoid using `access()` on directories

In 0060fd1511b (clone --recurse-submodules: prevent name squatting on
Windows, 2019-09-12), I introduced code to verify that a git dir either
does not exist, or is at least empty, to fend off attacks where an
inadvertently (and likely maliciously) pre-populated git dir would be
used while cloning submodules recursively.

The logic used `access(<path>, X_OK)` to verify that a directory exists
before calling `is_empty_dir()` on it. That is a curious way to check
for a directory's existence and might well fail for unwanted reasons.
Even the original author (it was I ;-) ) struggles to explain why this
function was used rather than `stat()`.

This code was _almost_ copypastad in the previous commit, but that
`access()` call was caught during review.

Let's use `stat()` instead also in the code that was almost copied
verbatim. Let's not use `lstat()` because in the unlikely event that
somebody snuck a symbolic link in, pointing to a crafted directory, we
want to verify that that directory is empty.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
builtin/submodule--helper.c