Junio C Hamano <gitster@xxxxxxxxx> writes: > 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@xxxxxxxxx> 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@xxxxxxxxx> --- 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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html