From: Junio C Hamano <gitster@pobox.com>
To: Jeff King <peff@peff.net>
Cc: Charles Bailey <cbailey32@bloomberg.net>, git@vger.kernel.org
Subject: Re: [PATCH] t4212: handle systems with post-apocalyptic gmtime
Date: Fri, 28 Mar 2014 09:41:53 -0700 [thread overview]
Message-ID: <xmqqd2h6cm26.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <20140327224837.GB32434@sigill.intra.peff.net> (Jeff King's message of "Thu, 27 Mar 2014 18:48:38 -0400")
Jeff King <peff@peff.net> writes:
>> 9999999999999999 Sat Jan 25 10:46:39 316889355 -0700
>> 99999999999999999 Wed Sep 6 02:46:39 -1126091476 -0700
>> 999999999999999999 Thu Oct 24 18:46:39 1623969404 -0700
>
> Thanks. Given the value where it fails, it kind of looks like there is
> some signed 32-bit value at work (~300 million years is OK, but 10 times
> that, rather than yielding ~3 billion, gets us -1 billion). Perhaps
> tm.tm_year is 32-bit.
That is what it looks like to me, too. It makes me wonder if some
other platforms may have similar breakage using 16-bit signed
tm_year and how such a breakage would look like, though ;-)
> So what do we want to do? I think the options are:
>
> 1. Try to guess when we have a bogus timestamp value with an arbitrary
> cutoff like "greater than 1 million years from now" (and enforce it
> via time_t seconds, and avoid gmtime entirely). That is made-up and
> arbitrary, but it also is sufficiently far that it won't ever
> matter, and sufficiently close that any gmtime should behave
> sensibly with it.
I think that two assumptions here are that
(1) we would be able to find a single insane value (like 3 billion
years from now expressed in time_t seconds) the test script
would be able to feed and expect it to fail on all platforms we
care about, even though how exactly that value causes various
platforms fail may be different (glibc may give us a NULL from
gmtime, FreeBSD may leave their own sentinel in gmtime we can
recognize, and some others may simply wrap around the years);
and that
(2) the only other class of failure mode we haven't considered
bevore Charles's report is tm_year wrapping around 32-bit
signed int.
Offhand, the three possible failure modes this thread identified
sounds to me like the only plausible ones, and I think the best way
forward might be to
- teach the "is the result sane, even though we may have got a
non-NULL from gmtime? otherwise let's signal a failure by
replacing it with a known sentinel value" codepath the new
failure mode Charles's report suggests---if we feed a positive
timestamp and gmtime gave us back a tm_year+1900 < 0, that is
certainly an overflow; and
- Use that 3-billion years timestamp from Charles's report in the
test and make sure we convert it to the known sentinel value.
perhaps?
> 2. Accept that we can't guess at every broken gmtime's output, and
> just loosen the test to make sure we don't segfault.
Of course that is a simpler option, but we may have identified all
plausible failure modes, in which case we can afford to go with your
original plan to validate that we not just avoid segfaulting on one
of the three failure modes from gmtime, but also cover the other two
failure modes and signal any of them with a sentinel. That way may
allow us to identify the fourth failure mode we haven't anticipated.
next prev parent reply other threads:[~2014-03-28 16:42 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-24 7:33 [PATCH 0/5] handle bogus commit dates Jeff King
2014-02-24 7:36 ` [PATCH 1/5] t4212: test bogus timestamps with git-log Jeff King
2014-02-24 7:39 ` [PATCH 2/5] fsck: report integer overflow in author timestamps Jeff King
2014-02-24 7:39 ` [PATCH 3/5] date: check date overflow against time_t Jeff King
2014-02-24 7:46 ` [PATCH 4/5] log: handle integer overflow in timestamps Jeff King
2014-02-24 19:50 ` Junio C Hamano
2014-02-24 19:58 ` Jeff King
2014-02-24 20:21 ` Junio C Hamano
2014-02-24 20:37 ` Jeff King
2014-02-24 21:01 ` Junio C Hamano
2014-02-24 7:49 ` [PATCH 5/5] log: do not segfault on gmtime errors Jeff King
2014-03-22 9:32 ` René Scharfe
2014-03-24 21:33 ` Jeff King
2014-03-24 22:03 ` René Scharfe
2014-03-24 22:11 ` Jeff King
2014-03-26 11:05 ` Charles Bailey
2014-03-26 18:21 ` Jeff King
2014-03-26 18:51 ` [PATCH] t4212: handle systems with post-apocalyptic gmtime Jeff King
2014-03-26 19:18 ` Junio C Hamano
2014-03-26 19:25 ` Jeff King
2014-03-26 19:33 ` Jeff King
2014-03-26 19:40 ` Jeff King
2014-03-26 20:36 ` Charles Bailey
2014-03-26 20:38 ` Jeff King
2014-03-26 20:41 ` Charles Bailey
2014-03-26 21:22 ` Charles Bailey
2014-03-26 21:57 ` Jeff King
2014-03-26 22:46 ` Charles Bailey
2014-03-27 22:48 ` Jeff King
2014-03-28 16:41 ` Junio C Hamano [this message]
2014-03-28 18:47 ` Jeff King
2014-03-28 19:02 ` Junio C Hamano
2014-03-28 19:05 ` Jeff King
2014-03-28 19:30 ` Junio C Hamano
2014-04-01 7:38 ` Jeff King
2014-04-01 7:42 ` [PATCH 1/2] date: recognize bogus FreeBSD gmtime output Jeff King
2014-04-01 17:42 ` René Scharfe
2014-04-01 19:08 ` Junio C Hamano
2014-04-01 21:17 ` René Scharfe
2014-04-01 21:28 ` Jeff King
2014-04-01 7:43 ` [PATCH 2/2] t4212: loosen far-in-future test for AIX Jeff King
2014-04-01 7:45 ` [PATCH 2alt/2] work around unreliable gmtime errors on AIX Jeff King
2014-04-01 19:07 ` [PATCH] t4212: handle systems with post-apocalyptic gmtime Junio C Hamano
2014-04-01 19:46 ` Jeff King
2014-03-26 18:58 ` [PATCH 5/5] log: do not segfault on gmtime errors Junio C Hamano
2014-03-26 19:01 ` Jeff King
2014-03-26 21:01 ` Junio C Hamano
2014-03-26 21:09 ` Jeff King
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=xmqqd2h6cm26.fsf@gitster.dls.corp.google.com \
--to=gitster@pobox.com \
--cc=cbailey32@bloomberg.net \
--cc=git@vger.kernel.org \
--cc=peff@peff.net \
/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.