Re: [PATCH] git.c: fix help.autocorrect after 57ea712 breaks it
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jan 27, 2016, 06:49 UTC
- Message-ID
- <xmqqbn87a54v.fsf@gitster.mtv.corp.google.com>
- In-Reply-To
- <xmqq60ygcd9a.fsf@gitster.mtv.corp.google.com>
Junio C Hamano <gitster@pobox.com> writes:
Show 5 quoted lines
> I spoke too soon, I am afraid. > ... > I wonder if this would be better done as a multi-part series that > goes like this: > ...
So here is the first of the three-patch series to replace it.
-- >8 -- From: Junio C Hamano <gitster@pobox.com> Date: Tue, 26 Jan 2016 11:46:53 -0800 Subject: [PATCH 1/3] git: remove an early return from save_env_before_alias()
When help.autocorrect is in effect, an attempt to auto-execute an uniquely corrected result of a misspelled alias will result in an irrelevant error message. The codepath that causes this issue calls save_env_before_alias() and restore_env() as a pair in handle_alias(), and that happens twice. A global variable orig_cwd is allocated and holds the return value of getcwd() in save_env_before_alias(), which is used in restore_env() to go back to that directory and freed.
However, save_env_before_alias() is not prepared to be called twice. It returns early when it knows it has already been called, leaving orig_cwd undefined, which is then checked in the second call to restore_env(), and by that time, the memory that used to hold the contents of orig_cwd is either freed or reused to hold something else, and this is fed to chdir(), causing it to fail.
Fix this by making sure save_env() does do the saving when called.
Signed-off-by: Junio C Hamano <gitster@pobox.com> --- git.c | 2 -- 1 file changed, 2 deletions(-)
diff --git a/git.c b/git.c index 98d4412..a57a4cb 100644 --- a/git.c +++ b/git.c @@ -30,8 +30,6 @@ static int saved_env_before_alias; static void save_env_before_alias(void) { int i; - if (saved_env_before_alias) - return; saved_env_before_alias = 1; orig_cwd = xgetcwd(); for (i = 0; i < ARRAY_SIZE(env_names); i++) {
-- 2.7.0-366-g065efda