diff options
author | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2017-04-04 17:21:19 +0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-04-16 18:24:29 -0700 |
commit | a560d87033729d884acb3f198cc52edd6c816416 (patch) | |
tree | 8e4fde703c5a5ed231b4540034b2aeec049262d0 /environment.c | |
parent | adac8115a6e7f9841c48e4fe48b74e0ce652ef58 (diff) | |
download | git-a560d87033729d884acb3f198cc52edd6c816416.tar.gz |
environment.c: fix potential segfault by get_git_common_dir()
setup_git_env() must be called before this function to initialize
git_common_dir so that it returns a non NULL string. And it must return
a non NULL string or segfault can happen because all callers expect so.
It does not do so explicitly though and depends on get_git_dir() being
called first (which will guarantee setup_git_env()). Avoid this
dependency and call setup_git_env() by itself.
test-ref-store.c will hit this problem because it's very lightweight,
just enough initialization to exercise refs code, and get_git_dir() will
never be called until get_worktrees() is, which uses get_git_common_dir
and hits a segfault.
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'environment.c')
-rw-r--r-- | environment.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/environment.c b/environment.c index 42dc3106d2..2986ee7200 100644 --- a/environment.c +++ b/environment.c @@ -214,6 +214,8 @@ const char *get_git_dir(void) const char *get_git_common_dir(void) { + if (!git_dir) + setup_git_env(); return git_common_dir; } |