diff options
author | Junio C Hamano <gitster@pobox.com> | 2009-12-22 12:32:39 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-12-22 12:32:39 -0800 |
commit | 129a5a6deacfe6ffb32291fcd96e0d1567f780b2 (patch) | |
tree | dd00f5a0afb3ef544a530109f5c66311cffe93e9 | |
parent | git svn: lookup new parents correctly from svn:mergeinfo (diff) | |
parent | Prevent git blame from segfaulting on a missing author name (diff) | |
download | tgif-129a5a6deacfe6ffb32291fcd96e0d1567f780b2.tar.xz |
Merge branch 'maint'
* maint:
Prevent git blame from segfaulting on a missing author name
-rw-r--r-- | builtin-blame.c | 13 | ||||
-rwxr-xr-x | t/t8003-blame.sh | 13 |
2 files changed, 23 insertions, 3 deletions
diff --git a/builtin-blame.c b/builtin-blame.c index d4e25a595d..6408ec8ee6 100644 --- a/builtin-blame.c +++ b/builtin-blame.c @@ -1305,6 +1305,7 @@ static void get_ac_line(const char *inbuf, const char *what, error_out: /* Ugh */ *tz = "(unknown)"; + strcpy(person, *tz); strcpy(mail, *tz); *time = 0; return; @@ -1314,20 +1315,26 @@ static void get_ac_line(const char *inbuf, const char *what, tmp = person; tmp += len; *tmp = 0; - while (*tmp != ' ') + while (person < tmp && *tmp != ' ') tmp--; + if (tmp <= person) + goto error_out; *tz = tmp+1; tzlen = (person+len)-(tmp+1); *tmp = 0; - while (*tmp != ' ') + while (person < tmp && *tmp != ' ') tmp--; + if (tmp <= person) + goto error_out; *time = strtoul(tmp, NULL, 10); timepos = tmp; *tmp = 0; - while (*tmp != ' ') + while (person < tmp && *tmp != ' ') tmp--; + if (tmp <= person) + return; mailpos = tmp + 1; *tmp = 0; maillen = timepos - tmp; diff --git a/t/t8003-blame.sh b/t/t8003-blame.sh index 13c25f1d52..ad834f200a 100755 --- a/t/t8003-blame.sh +++ b/t/t8003-blame.sh @@ -144,4 +144,17 @@ test_expect_success 'blame path that used to be a directory' ' git blame HEAD^.. -- path ' +test_expect_success 'blame to a commit with no author name' ' + TREE=`git rev-parse HEAD:` + cat >badcommit <<EOF +tree $TREE +author <noname> 1234567890 +0000 +committer David Reiss <dreiss@facebook.com> 1234567890 +0000 + +some message +EOF + COMMIT=`git hash-object -t commit -w badcommit` + git --no-pager blame $COMMIT -- uno >/dev/null +' + test_done |