Merge branch 'maint'

* maint:
  Prevent git blame from segfaulting on a missing author name
maint
Junio C Hamano 2009-12-22 12:32:39 -08:00
commit 129a5a6dea
2 changed files with 23 additions and 3 deletions

View File

@ -1305,6 +1305,7 @@ static void get_ac_line(const char *inbuf, const char *what,
error_out: error_out:
/* Ugh */ /* Ugh */
*tz = "(unknown)"; *tz = "(unknown)";
strcpy(person, *tz);
strcpy(mail, *tz); strcpy(mail, *tz);
*time = 0; *time = 0;
return; return;
@ -1314,20 +1315,26 @@ static void get_ac_line(const char *inbuf, const char *what,
tmp = person; tmp = person;
tmp += len; tmp += len;
*tmp = 0; *tmp = 0;
while (*tmp != ' ') while (person < tmp && *tmp != ' ')
tmp--; tmp--;
if (tmp <= person)
goto error_out;
*tz = tmp+1; *tz = tmp+1;
tzlen = (person+len)-(tmp+1); tzlen = (person+len)-(tmp+1);


*tmp = 0; *tmp = 0;
while (*tmp != ' ') while (person < tmp && *tmp != ' ')
tmp--; tmp--;
if (tmp <= person)
goto error_out;
*time = strtoul(tmp, NULL, 10); *time = strtoul(tmp, NULL, 10);
timepos = tmp; timepos = tmp;


*tmp = 0; *tmp = 0;
while (*tmp != ' ') while (person < tmp && *tmp != ' ')
tmp--; tmp--;
if (tmp <= person)
return;
mailpos = tmp + 1; mailpos = tmp + 1;
*tmp = 0; *tmp = 0;
maillen = timepos - tmp; maillen = timepos - tmp;

View File

@ -144,4 +144,17 @@ test_expect_success 'blame path that used to be a directory' '
git blame HEAD^.. -- path 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 test_done