custom pretty format: tolerate empty e-mail address
When e-mail address is empty (e.g. "A U Thor <>"), --pretty=format misparsed the commit header and did not pick up the date field correctly. Noticed by Marco, fixed slightly differently with additional sanity check and with a test. Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
5682694a3c
commit
f7ab5c7937
16
pretty.c
16
pretty.c
|
@ -292,7 +292,18 @@ static void format_person_part(struct strbuf *sb, char part,
|
||||||
/* parse name */
|
/* parse name */
|
||||||
for (end = 0; end < len && msg[end] != '<'; end++)
|
for (end = 0; end < len && msg[end] != '<'; end++)
|
||||||
; /* do nothing */
|
; /* do nothing */
|
||||||
|
/*
|
||||||
|
* If it does not even have a '<' and '>', that is
|
||||||
|
* quite a bogus commit author and we discard it;
|
||||||
|
* this is in line with add_user_info() that is used
|
||||||
|
* in the normal codepath. When end points at the '<'
|
||||||
|
* that we found, it should have matching '>' later,
|
||||||
|
* which means start (beginning of email address) must
|
||||||
|
* be strictly below len.
|
||||||
|
*/
|
||||||
start = end + 1;
|
start = end + 1;
|
||||||
|
if (start >= len - 1)
|
||||||
|
return;
|
||||||
while (end > 0 && isspace(msg[end - 1]))
|
while (end > 0 && isspace(msg[end - 1]))
|
||||||
end--;
|
end--;
|
||||||
if (part == 'n') { /* name */
|
if (part == 'n') { /* name */
|
||||||
|
@ -300,11 +311,8 @@ static void format_person_part(struct strbuf *sb, char part,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (start >= len)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* parse email */
|
/* parse email */
|
||||||
for (end = start + 1; end < len && msg[end] != '>'; end++)
|
for (end = start; end < len && msg[end] != '>'; end++)
|
||||||
; /* do nothing */
|
; /* do nothing */
|
||||||
|
|
||||||
if (end >= len)
|
if (end >= len)
|
||||||
|
|
|
@ -139,4 +139,14 @@ commit 131a310eb913d107dd3c09a65d1651175898735d
|
||||||
commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
|
commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
test_expect_success 'empty email' '
|
||||||
|
test_tick &&
|
||||||
|
C=$(GIT_AUTHOR_EMAIL= git commit-tree HEAD^{tree} </dev/null) &&
|
||||||
|
A=$(git show --pretty=format:%an,%ae,%ad%n -s $C) &&
|
||||||
|
test "$A" = "A U Thor,,Thu Apr 7 15:14:13 2005 -0700" || {
|
||||||
|
echo "Eh? $A" >failure
|
||||||
|
false
|
||||||
|
}
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|
Loading…
Reference in New Issue