Jeff King <peff@xxxxxxxx> writes: > If an ident line has a ridiculous date value like (2^64)+1, > we currently just pass ULONG_MAX along to the date code, > which can produce nonsensical dates. > > On systems with a signed long time_t (e.g., 64-bit glibc > systems), this actually doesn't end up too bad. The > ULONG_MAX is converted to -1, we apply the timezone field to > that, and the result ends up somewhere between Dec 31, 1969 > and Jan 1, 1970. > ... > We also recognize overflow in the timezone field, which > could produce nonsensical results. In this case we show the > parsed date, but in UTC. Both are good measures to fallback to sanity, but why is that if/else? In other words... > + if (date_overflows(date)) > + date = 0; > + else { > + if (ident->tz_begin && ident->tz_end) > + tz = strtol(ident->tz_begin, NULL, 10); > + if (tz == LONG_MAX || tz == LONG_MIN) > + tz = 0; > + } ... don't we want to fix an input having a bogus timestamp and also a bogus tz recorded in it? > return show_date(date, tz, mode); > } > > diff --git a/t/t4212-log-corrupt.sh b/t/t4212-log-corrupt.sh > index 83de981..ba25a2e 100755 > --- a/t/t4212-log-corrupt.sh > +++ b/t/t4212-log-corrupt.sh > @@ -65,4 +65,20 @@ test_expect_success 'unparsable dates produce sentinel value (%ad)' ' > test_cmp expect actual > ' > > +# date is 2^64 + 1 > +test_expect_success 'date parser recognizes integer overflow' ' > + commit=$(munge_author_date HEAD 18446744073709551617) && > + echo "Thu Jan 1 00:00:00 1970 +0000" >expect && > + git log -1 --format=%ad $commit >actual && > + test_cmp expect actual > +' > + > +# date is 2^64 - 2 > +test_expect_success 'date parser recognizes time_t overflow' ' > + commit=$(munge_author_date HEAD 18446744073709551614) && > + echo "Thu Jan 1 00:00:00 1970 +0000" >expect && > + git log -1 --format=%ad $commit >actual && > + test_cmp expect actual > +' > + > test_done -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html