Prevent git blame from segfaulting on a missing author name
PATCH 1/1 Prevent git blame from segfaulting on a missing author name
The author name should never be missing in a valid commit, but git shouldn't segfault no matter what is in the object database. (Most of the C code was written by Junio.)
Signed-off-by David Reiss <[email protected]>
--- builtin-blame.c | 13 ++++++++++--- t/t8003-blame.sh | 13 +++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-)
builtin-blame.c +10 -3
@@ -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;
t/t8003-blame.sh +13 -0
@@ -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 <[email protected]> 1234567890 +0000 + +some message +EOF + COMMIT=`git hash-object -t commit -w badcommit` + git --no-pager blame $COMMIT -- uno >/dev/null +' + test_done
Signature · 1 line
1.6.3.3