]> git.ipfire.org Git - thirdparty/git.git/commit - environment.c
set_git_dir: fix crash when used with real_path()
authorAlexandr Miloslavskiy <alexandr.miloslavskiy@syntevo.com>
Fri, 6 Mar 2020 19:03:13 +0000 (19:03 +0000)
committerJunio C Hamano <gitster@pobox.com>
Fri, 6 Mar 2020 22:45:51 +0000 (14:45 -0800)
commit0915a5b4cdf00a8c6c755b77b854725a183993b4
tree9614e0bd72e228432eeb16a1c7219deb0061e3ed
parent076cbdcd739aeb33c1be87b73aebae5e43d7bcc5
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 <alexandr.miloslavskiy@syntevo.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/init-db.c
cache.h
environment.c
path.c
setup.c