parse_date: fix signedness in timezone calculation
commit9ba0f0334dd505f78e0374bbe857c5e202f5a778
authorJeff King <peff@peff.net>
Sun, 4 Jul 2010 11:00:17 +0000 (4 07:00 -0400)
committerJunio C Hamano <gitster@pobox.com>
Mon, 5 Jul 2010 18:57:07 +0000 (5 11:57 -0700)
tree3cc507dba882fd65ce121e7838b699441ecf9050
parentad9d8e8f0f13e054ee30fcdcdb51973ddcfadb37
parse_date: fix signedness in timezone calculation

When no timezone is specified, we deduce the offset by
subtracting the result of mktime from our calculated
timestamp.

However, our timestamp is stored as an unsigned integer,
meaning we perform the subtraction as unsigned. For a
negative offset, this means we wrap to a very high number,
and our numeric timezone is in the millions of hours. You
can see this bug by doing:

   $ TZ=EST \
     GIT_AUTHOR_DATE='2010-06-01 10:00' \
     git commit -a -m foo
   $ git cat-file -p HEAD | grep author
   author Jeff King <peff@peff.net> 1275404416 +119304128

Instead, we should perform this subtraction as a time_t, the
same type that mktime returns.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
date.c
t/t0006-date.sh