[PATCH v2 3/5] setup: refactor `ensure_safe_repository()` testing priorities
- From
Michael Lohmann <git@lohmann.sh>
- Date
- Oct 13, 2025, 21:46 UTC
- Message-ID
- <20251013214608.33581-4-git@lohmann.sh>
- In-Reply-To
- <20251013214608.33581-1-git@lohmann.sh>
The implicit ownership test takes precedence over the explicit allow-listing of a path by "safe.directory" config. Sort by "priority" (explicitness). This also allows to more easily integrate additional checks.
Make the explicit safe.directory check take precedence over owner check.
Signed-off-by: Michael Lohmann <git@lohmann.sh> --- setup.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/setup.c b/setup.c index 69f6d1b36c..41a12a85ab 100644 --- a/setup.c +++ b/setup.c @@ -1307,12 +1307,6 @@ static int ensure_safe_repository(const char *gitfile, { struct safe_directory_data data = { 0 }; - if (!git_env_bool("GIT_TEST_ASSUME_DIFFERENT_OWNER", 0) && - (!gitfile || is_path_owned_by_current_user(gitfile, report)) && - (!worktree || is_path_owned_by_current_user(worktree, report)) && - (!gitdir || is_path_owned_by_current_user(gitdir, report))) - return 1; - /* * normalize the data.path for comparison with normalized paths * that come from the configuration file. The path is unsafe @@ -1330,7 +1324,16 @@ static int ensure_safe_repository(const char *gitfile, git_protected_config(safe_directory_cb, &data); free(data.path); - return data.is_safe; + if (data.is_safe) + return 1; + + if (!git_env_bool("GIT_TEST_ASSUME_DIFFERENT_OWNER", 0) && + (!gitfile || is_path_owned_by_current_user(gitfile, report)) && + (!worktree || is_path_owned_by_current_user(worktree, report)) && + (!gitdir || is_path_owned_by_current_user(gitdir, report))) + return 1; + + return 0; } void die_upon_assumed_unsafe_repo(const char *gitfile, const char *worktree,
-- 2.50.1 (Apple Git-155)