[PATCH v2 3/5] setup: refactor `ensure_safe_repository()` testing priorities
From: Michael Lohmann <hidden>
Date: 2025-10-13 21:46:31
Subsystem:
the rest · Maintainer:
Linus Torvalds
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 <redacted> --- 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)