зеркало из https://github.com/microsoft/git.git
Merge branch 'maint'
* maint: Prevent git blame from segfaulting on a missing author name
This commit is contained in:
Коммит
129a5a6dea
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
Загрузка…
Ссылка в новой задаче