From: Dennis Kaarsemaker <dennis@kaarsemaker.net>
To: Eric Sunshine <sunshine@sunshineco.com>
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: Wed, 06 Jan 2016 02:20:12 +0100 [thread overview]
Message-ID: <1452043212.5562.18.camel@kaarsemaker.net> (raw)
In-Reply-To: <CAPig+cRufd4qOwZRpw2TR39npkRGg=7S+7YwfSu6EvRR95kRSA@mail.gmail.com>
On di, 2016-01-05 at 20:05 -0500, Eric Sunshine wrote:
> 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.
To paraphrase what Junio said earlier in this thread: tests determine
what is sane behavior, so using the word 'sanely' isn't really
appropriate. This is a regression test to make sure we don't
accidentally reintroduce behavior that segfaults, which I think is an
easy mistake to make with the current code, so I think the title is
appropriate.
> > + 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.
That's... surprising to say the least. What's the content of 'actual',
and which git.git commit are you on?
> 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).
I kept them separate to show that while this no longer segfaults, it's
still not the correct output, but showing correct output is a much
bigger project.
--
Dennis Kaarsemaker
www.kaarsemaker.net
next prev parent reply other threads:[~2016-01-06 1:20 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
2016-01-06 1:20 ` Dennis Kaarsemaker [this message]
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=1452043212.5562.18.camel@kaarsemaker.net \
--to=dennis@kaarsemaker.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=pclouds@gmail.com \
--cc=sunshine@sunshineco.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).