Re: [PATCH v3 1/4] environment.c: fix potential segfault by get_git_common_dir()
- From
Duy Nguyen <pclouds@gmail.com>
- Date
- Mar 19, 2017, 09:34 UTC
- Message-ID
- <CACsJy8B=NKAERaGWCH-kvU0WE7j8KSXz74U3N+fHmkhqXWTBeQ@mail.gmail.com>
- In-Reply-To
- <xmqq8to24gif.fsf@gitster.mtv.corp.google.com>
On Sun, Mar 19, 2017 at 12:54 AM, Junio C Hamano <gitster@pobox.com> wrote:
Show 14 quoted lines
> Nguyễn Thái Ngọc Duy <pclouds@gmail.com> writes: > >> 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...?
-EHARDTOPARSE. There's a hidden dependency between get_git_dir() and get_git_common_dir() which is not good. If we lazily call set_git_env(), make sure we do it lazily but consistently at all relevant function calls (i.e. including get_git_common_dir).
Alternatively (I was thinking of this but didn't really follow up because this was side issue) we should make sure setup_git_env() is always called at the end of setup_git_dir...() and remove the laziness in get_git_dir(). This may be more in line of recent attempts to catch repo access without calling setup_git_directory..() first. But sadly I haven't read Jeff's series, so I can't say whether it's true.
-- Duy