Re: Crash on MSYS2 with GIT_WORK_TREE
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Mar 8, 2017, 02:36 UTC
- Message-ID
- <xmqqh9344hq6.fsf@gitster.mtv.corp.google.com>
- In-Reply-To
- <alpine.DEB.2.20.1703080104580.3767@virtualbox>
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
Show 11 quoted lines
> The problem is actually even worse: On *Linux*, this happens: > > $ GIT_WORK_TREE=c:/invalid git rev-parse HEAD > Segmentation fault (core dumped) > > The reason is this: when set_git_work_tree() was converted from using > xstrdup(real_path()) to real_pathdup(), we completely missed the fact that > the former passed die_on_error = 1 to strbuf_realpath(), while the latter > passed die_on_error = 0. As a consequence, work_tree can be NULL now, and > the current code does not expect set_git_work_tree() to return > successfully after setting work_tree to NULL.
Ouch.
> Brandon, I have a hunch that pretty much all of the xstrdup(real_path()) > -> real_pathdup() sites have a problem now. The previous contract was that > real_path() would die() if the passed path is invalid. The new contract is > that real_pathdup() returns NULL in such a case.
OK, so it appears that we'd better audit all the callsites of real_pathdup() and see if anybody _assumes_ that the return values are not NULL. They all need fixing.
Thanks for digging it through to the root cause.