From 0915a5b4cdf00a8c6c755b77b854725a183993b4 Mon Sep 17 00:00:00 2001 From: Alexandr Miloslavskiy Date: Fri, 6 Mar 2020 19:03:13 +0000 Subject: set_git_dir: fix crash when used with real_path() `real_path()` returns result from a shared buffer, inviting subtle reentrance bugs. One of these bugs occur when invoked this way: set_git_dir(real_path(git_dir)) In this case, `real_path()` has reentrance: real_path read_gitfile_gently repo_set_gitdir setup_git_env set_git_dir_1 set_git_dir Later, `set_git_dir()` uses its now-dead parameter: !is_absolute_path(path) Fix this by using a dedicated `strbuf` to hold `strbuf_realpath()`. Signed-off-by: Alexandr Miloslavskiy Signed-off-by: Junio C Hamano --- path.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'path.c') diff --git a/path.c b/path.c index 88cf593007..c5a8fe4f0c 100644 --- a/path.c +++ b/path.c @@ -850,7 +850,7 @@ const char *enter_repo(const char *path, int strict) } if (is_git_directory(".")) { - set_git_dir("."); + set_git_dir(".", 0); check_repository_format(); return path; } -- cgit v1.2.3