An insane ident line (generated by old version of git or by hands such as git-hash-object) may cause segfault for `git log` and others commands. This is because the `split_ident_line` function save the result in ident_split, and the returned ident_split.date_begin, ident_split.date_end, ident_split.tz_begin, and ident_split.tz_end maybe NULL pointers for an insame ident line. This issue was was introduced in v1.8.1-rc1-7-g3c020bd (Use split_ident_line to parse author and committer). Signed-off-by: Jiang Xin <worldhello.net@xxxxxxxxx> --- builtin/blame.c | 14 +++++++++++--- pretty.c | 9 +++++++-- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/builtin/blame.c b/builtin/blame.c index 86100..4b94e 100644 --- a/builtin/blame.c +++ b/builtin/blame.c @@ -1375,10 +1375,18 @@ 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 != NULL) { + *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 != NULL && ident.tz_end !=NULL) { + len = ident.tz_end - ident.tz_begin; + strbuf_add(tz, ident.tz_begin, len); + } else { + strbuf_addstr(tz, "(unknown)"); + } /* * Now, convert both name and e-mail using mailmap diff --git a/pretty.c b/pretty.c index d3a82..2402f 100644 --- a/pretty.c +++ b/pretty.c @@ -438,8 +438,13 @@ 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 != NULL) { + time = strtoul(ident.date_begin, &date, 10); + tz = strtol(date, NULL, 10); + } else { + time = 0; + tz = 0; + } if (pp->fmt == CMIT_FMT_EMAIL) { strbuf_addstr(sb, "From: "); -- 1.8.2.1.348.gb94490b -- 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