git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCHv2] blame: fix memory corruption scrambling revision name in error message

From
Junio C Hamano <gitster@pobox.com>
Date
Jul 24, 2017, 21:41 UTC
Message-ID
<xmqq4lu1cy32.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<20170724211550.17224-1-szeder.dev@gmail.com>
SZEDER Gábor <szeder.dev@gmail.com> writes:
Show 18 quoted lines
> When attempting to blame a non-existing path, git should show an error
> message like this:
>
>   $ git blame e83c51633 -- nonexisting-file
>   fatal: no such path nonexisting-file in e83c51633
>
> Since the recent commit 835c49f7d (blame: rework methods that
> determine 'final' commit, 2017-05-24) the revision name is either
> missing or some scrambled characters are shown instead.  The reason is
> that the revision name must be duplicated, because it is invalidated
> when the pending objects array is cleared in the meantime, but this
> commit dropped the duplication.
>
> Restore the duplication of the revision name in the affected functions
> (find_single_final() and find_single_initial()).
>
> Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
> ---
Thanks.  

I vaguely recall we had the same breakage in the code that was already fixed long time ago; that's a strange coincidence if the js/blame-lib topic reintroduced the same bug ;-).

Will queue.
Show 35 quoted lines
>
> Use xstrdup_or_null() in the first hunk.
>
>  blame.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/blame.c b/blame.c
> index 91e26e93e..f575e9cbf 100644
> --- a/blame.c
> +++ b/blame.c
> @@ -1663,7 +1663,7 @@ static struct commit *find_single_final(struct rev_info *revs,
>  		name = revs->pending.objects[i].name;
>  	}
>  	if (name_p)
> -		*name_p = name;
> +		*name_p = xstrdup_or_null(name);
>  	return found;
>  }
>  
> @@ -1735,7 +1735,7 @@ static struct commit *find_single_initial(struct rev_info *revs,
>  		die("No commit to dig up from?");
>  
>  	if (name_p)
> -		*name_p = name;
> +		*name_p = xstrdup(name);
>  	return found;
>  }
>  
> @@ -1843,6 +1843,8 @@ void setup_scoreboard(struct blame_scoreboard *sb, const char *path, struct blam
>  
>  	if (orig)
>  		*orig = o;
> +
> +	free((char *)final_commit_name);
>  }
Previous: SZEDER Gábor
Message 2 of 2 in “[PATCHv2] blame: fix memory corruption scrambling revision name in error message”
  1. SZEDER GáborJul 24, 2017
  2. Junio C HamanoJul 24, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.