Re: [PATCH v3 1/4] environment.c: fix potential segfault by get_git_common_dir()
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Mar 18, 2017, 17:54 UTC
- Message-ID
- <xmqq8to24gif.fsf@gitster.mtv.corp.google.com>
- In-Reply-To
- <20170318100206.5980-2-pclouds@gmail.com>
Nguyễn Thái Ngọc Duy <pclouds@gmail.com> writes:
Show 8 quoted lines
> 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. > > Normally if somebody has called get_git_dir(), or set_git_dir() then > setup_git_env() is already called. But if you do setup_git_directory() > at top dir (which skips set_git_dir) and never call get_git_dir, you'll > get NULL here.
Hmph, and the solution for the problem not being "so let's make sure get_git_dir() is called even when the command is started at the top directory" is because...?
> 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(). > ---
Missing sign-off.
Show 15 quoted lines
> environment.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> 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;
> }