From: Eric Sunshine <sunshine@sunshineco.com>
To: Dennis Kaarsemaker <dennis@kaarsemaker.net>
Cc: "Git List" <git@vger.kernel.org>,
"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>,
"Junio C Hamano" <gitster@pobox.com>
Subject: Re: [PATCH v4] reflog-walk: don't segfault on non-commit sha1's in the reflog
Date: Tue, 5 Jan 2016 20:05:46 -0500 [thread overview]
Message-ID: <CAPig+cRufd4qOwZRpw2TR39npkRGg=7S+7YwfSu6EvRR95kRSA@mail.gmail.com> (raw)
In-Reply-To: <20160105211206.GA12057@spirit>
On Tue, Jan 5, 2016 at 4:12 PM, Dennis Kaarsemaker
<dennis@kaarsemaker.net> wrote:
> git reflog (ab)uses the log machinery to display its list of log
> entries. To do so it must fake commit parent information for the log
> walker.
>
> For refs in refs/heads this is no problem, as they should only ever
> point to commits. Tags and other refs however can point to anything,
> thus their reflog may contain non-commit objects.
>
> To avoid segfaulting, we check whether reflog entries are commits before
> feeding them to the log walker and skip any non-commits. This means that
> git reflog output will be incomplete for such refs, but that's one step
> up from segfaulting. A more complete solution would be to decouple git
> reflog from the log walker machinery.
>
> Signed-off-by: Dennis Kaarsemaker <dennis@kaarsemaker.net>
> ---
> diff --git a/t/t1410-reflog.sh b/t/t1410-reflog.sh
> @@ -325,4 +325,17 @@ test_expect_success 'parsing reverse reflogs at BUFSIZ boundaries' '
> +test_expect_success 'no segfaults for reflog containing non-commit sha1s' '
Nit: It's kind of strange for a test title to talk about not
segfaulting; that's behavior you'd expect to be true for all tests.
Perhaps describe it as "non-commit reflog entries handled sanely" or
something.
> + git update-ref --create-reflog -m "Creating ref" \
> + refs/tests/tree-in-reflog HEAD &&
> + git update-ref -m "Forcing tree" refs/tests/tree-in-reflog HEAD^{tree} &&
> + git update-ref -m "Restoring to commit" refs/tests/tree-in-reflog HEAD &&
> + git reflog refs/tests/tree-in-reflog
> +'
Hmm, this test is successful for me on OS X even without the
reflog-walk.c changes applied.
> +test_expect_failure 'reflog with non-commit entries displays all entries' '
> + git reflog refs/tests/tree-in-reflog >actual &&
> + test_line_count = 3 actual
> +'
And this test actually fails (inversely) because it's expecting a
failure, but doesn't get one since the command produces the expected
output.
By the way, it may make sense to combine these two tests. If a
segfault occurs, the actual output likely will not match the expected
output, thus the test will fail anyhow (unless the segfault occurs
after all output).
> +
> test_done
> --
> 2.7.0-rc3-219-g24972d4
next prev parent reply other threads:[~2016-01-06 1:06 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-30 9:24 Segfault in git reflog Dennis Kaarsemaker
2015-12-30 10:31 ` Duy Nguyen
2015-12-30 11:17 ` Dennis Kaarsemaker
2015-12-30 11:26 ` Duy Nguyen
2015-12-30 11:28 ` Duy Nguyen
2015-12-30 12:28 ` Dennis Kaarsemaker
2015-12-30 13:19 ` Duy Nguyen
2015-12-30 15:22 ` [PATCH] reflog-walk: don't segfault on non-commit sha1's in the reflog Dennis Kaarsemaker
2015-12-30 21:20 ` Junio C Hamano
2015-12-30 21:33 ` Dennis Kaarsemaker
2015-12-30 21:41 ` Junio C Hamano
2015-12-30 21:49 ` Dennis Kaarsemaker
2015-12-30 22:17 ` [PATCH v2] " Dennis Kaarsemaker
2015-12-30 22:42 ` Junio C Hamano
2015-12-30 23:33 ` [PATCH v3] " Dennis Kaarsemaker
2015-12-31 0:02 ` Junio C Hamano
2015-12-31 8:57 ` Dennis Kaarsemaker
2015-12-31 15:43 ` Dennis Kaarsemaker
2016-01-05 21:12 ` [PATCH v4] " Dennis Kaarsemaker
2016-01-06 1:05 ` Eric Sunshine [this message]
2016-01-06 1:20 ` Dennis Kaarsemaker
2016-01-06 1:28 ` Eric Sunshine
2016-01-06 1:52 ` Eric Sunshine
2016-01-06 9:13 ` Dennis Kaarsemaker
2016-01-06 9:30 ` Duy Nguyen
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='CAPig+cRufd4qOwZRpw2TR39npkRGg=7S+7YwfSu6EvRR95kRSA@mail.gmail.com' \
--to=sunshine@sunshineco.com \
--cc=dennis@kaarsemaker.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=pclouds@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).