From: Michael Lohmann Date: Mon, 13 Oct 2025 09:41:44 GMT Subject: [PATCH 3/5] setup: refactor `ensure_safe_repository()` testing priorities Message-ID: <20251013094152.23597-4-git@lohmann.sh> In-Reply-To: <20251013094152.23597-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 --- 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)