• Jeff King's avatar
    approxidate: fix NULL dereference in date_time() · aa097b88
    Jeff King authored
    When we see a time like "noon", we pass "12" to our date_time() helper,
    which sets the hour to 12pm. If the current time is before noon, then we
    wrap around to yesterday using date_yesterday(). But unlike the normal
    calls to date_yesterday() from approxidate_alpha(), we pass a NULL "num"
    parameter. Since c27cc94f (approxidate: handle pending number for
    "specials", 2018-11-02), that causes a segfault.
    
    One way to fix this is by checking for NULL. But arguably date_time() is
    abusing our helper by passing NULL in the first place (and this is the
    only case where one of these "special" parsers is used this way). So
    instead, let's have it just do the 1-day subtraction itself. It's still
    just a one-liner due to our update_tm() helper.
    
    Note that the test added here is a little funny, as we say "10am noon",
    which makes the "10am" seem pointless.  But this bug can only be
    triggered when it the currently-parsed hour is before the special time.
    The latest special time is "tea" at 1700, but t0006 uses a hard-coded
    TEST_DATE_NOW of 1900. We could reset TEST_DATE_NOW, but that may lead
    to confusion in other tests. Just saying "10am noon" makes this test
    self-contained.
    Reported-by: default avatarCarlo Arenas <carenas@gmail.com>
    Signed-off-by: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    aa097b88
date.c 28 KB