summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2009-12-22 20:32:39 (GMT)
committerJunio C Hamano <gitster@pobox.com>2009-12-22 20:32:39 (GMT)
commit129a5a6deacfe6ffb32291fcd96e0d1567f780b2 (patch)
treedd00f5a0afb3ef544a530109f5c66311cffe93e9
parent0fe19753f26e2747f48d1ec6a1761006d75c2d71 (diff)
parentc8cba79181abc139d7cba364bf868875426fc2c1 (diff)
downloadgit-129a5a6deacfe6ffb32291fcd96e0d1567f780b2.zip
git-129a5a6deacfe6ffb32291fcd96e0d1567f780b2.tar.gz
git-129a5a6deacfe6ffb32291fcd96e0d1567f780b2.tar.bz2
Merge branch 'maint'
* maint: Prevent git blame from segfaulting on a missing author name
-rw-r--r--builtin-blame.c13
-rwxr-xr-xt/t8003-blame.sh13
2 files changed, 23 insertions, 3 deletions
diff --git a/builtin-blame.c b/builtin-blame.c
index d4e25a5..6408ec8 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 13c25f1..ad834f2 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