On Sat, Feb 23, 2013 at 12:30:28AM +0200, Mantas Mikulėnas wrote: > When messing around with various repositories, I noticed that git 1.8 > (currently using 1.8.2.rc0.22.gb3600c3) has problems parsing tag objects > that have invalid timestamps. > > Times in tag objects appear to be kept as Unix timestamps, but I didn't > realize this at first, and ran something roughly equivalent to: > git cat-file -p $tagname | git hash-object -w -t tag --stdin > creating a tag object the "tagger" line containing formatted time > instead of a Unix timestamp. Thanks, that makes it easy to replicate. It looks like it is not just tags, but rather the pp_user_info function does not realize that split_ident may return NULL for the date field if it is unparseable. Something like this stops the crash and just gives a bogus date: diff --git a/pretty.c b/pretty.c index eae57ad..9688857 100644 --- a/pretty.c +++ b/pretty.c @@ -428,8 +428,16 @@ void pp_user_info(const struct pretty_print_context *pp, strbuf_add(&name, namebuf, namelen); namelen = name.len + mail.len + 3; /* ' ' + '<' + '>' */ - time = strtoul(ident.date_begin, &date, 10); - tz = strtol(date, NULL, 10); + + if (ident.date_begin) { + time = strtoul(ident.date_begin, &date, 10); + tz = strtol(date, NULL, 10); + } + else { + /* ident line had malformed date */ + time = 0; + tz = 0; + } if (pp->fmt == CMIT_FMT_EMAIL) { strbuf_addstr(sb, "From: "); I guess we should probably issue a warning, too. Also disappointingly, git-fsck does not seem to detect this breakage at all. > Git doesn't handle the resulting tag objects nicely at all. For example, > running `git cat-file -p` on the new object outputs a really odd > timestamp "Thu Jun Thu Jan 1 00:16:09 1970 +0016" (I'm guessing it > parses the year as Unix time), and `git show` outright crashes > (backtrace included below.) If "cat-file -p" is not using the usual pretty-print routines, it probably should. I'll take a look. -Peff -- 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