From: Junio C Hamano <gitster@pobox.com>
To: "SZEDER Gábor" <szeder.dev@gmail.com>
Cc: Jeff Smith <whydoubt@gmail.com>, git@vger.kernel.org
Subject: Re: [PATCHv2] blame: fix memory corruption scrambling revision name in error message
Date: Mon, 24 Jul 2017 14:41:05 -0700 [thread overview]
Message-ID: <xmqq4lu1cy32.fsf@gitster.mtv.corp.google.com> (raw)
In-Reply-To: <20170724211550.17224-1-szeder.dev@gmail.com> ("SZEDER Gábor"'s message of "Mon, 24 Jul 2017 23:15:50 +0200")
SZEDER Gábor <szeder.dev@gmail.com> writes:
> 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.
>
> 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);
> }
prev parent reply other threads:[~2017-07-24 21:41 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-24 21:15 [PATCHv2] blame: fix memory corruption scrambling revision name in error message SZEDER Gábor
2017-07-24 21:41 ` Junio C Hamano [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqq4lu1cy32.fsf@gitster.mtv.corp.google.com \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=szeder.dev@gmail.com \
--cc=whydoubt@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.