diff options
author | René Scharfe <rene.scharfe@lsrfire.ath.cx> | 2013-04-17 20:33:54 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-04-17 14:50:45 -0700 |
commit | de5abe9fe91a496d019d62abefe23df9d72fad30 (patch) | |
tree | b7e96cb9f56afd1b82ad9a610c033f56254fc558 | |
parent | 9dbe7c3d7f4424cf0c27c2d4efabf72e58fa76b9 (diff) | |
download | git-de5abe9fe91a496d019d62abefe23df9d72fad30.tar.gz git-de5abe9fe91a496d019d62abefe23df9d72fad30.tar.xz |
blame: handle broken commit headers gracefully
split_ident_line() can leave us with the pointers date_begin, date_end,
tz_begin and tz_end all set to NULL. Check them before use and supply
the same fallback values as in the case of a negative return code from
split_ident_line().
The "(unknown)" is not actually shown in the output, though, because it
will be converted to a number (zero) eventually.
Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | builtin/blame.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/builtin/blame.c b/builtin/blame.c index 86100e966..77707819a 100644 --- a/builtin/blame.c +++ b/builtin/blame.c @@ -1375,10 +1375,15 @@ static void get_ac_line(const char *inbuf, const char *what, maillen = ident.mail_end - ident.mail_begin; mailbuf = ident.mail_begin; - *time = strtoul(ident.date_begin, NULL, 10); + if (ident.date_begin && ident.date_end) + *time = strtoul(ident.date_begin, NULL, 10); + else + *time = 0; - len = ident.tz_end - ident.tz_begin; - strbuf_add(tz, ident.tz_begin, len); + if (ident.tz_begin && ident.tz_end) + strbuf_add(tz, ident.tz_begin, ident.tz_end - ident.tz_begin); + else + strbuf_addstr(tz, "(unknown)"); /* * Now, convert both name and e-mail using mailmap |