From: Junio C Hamano Date: Fri, 12 Jul 2013 20:28:57 GMT Subject: Re: Bug in .mailmap handling? Message-ID: <7vfvvjjzee.fsf@alter.siamese.dyndns.org> In-Reply-To: <51E029B9.20108@googlemail.com> Stefan Beller writes: > # Adding the line to the mailmap should make life easy, so we know > # it's the same person > echo "A " > .mailmap While I was looking at this, I noticed this piece of code: diff --git a/mailmap.c b/mailmap.c index 2a7b366..418081e 100644 --- a/mailmap.c +++ b/mailmap.c @@ -122,7 +122,7 @@ static char *parse_name_and_email(char *buffer, char **name, while (nend > nstart && isspace(*nend)) --nend; - *name = (nstart < nend ? nstart : NULL); + *name = (nstart <= nend ? nstart : NULL); *email = left+1; *(nend+1) = '\0'; *right++ = '\0'; The function is given a buffer "A ...", nstart scans from the beginning of the buffer, skipping whitespaces (there isn't any, so nstart points at the buffer), while nend starts from one byte before the first '<' and skips whitespaces backwards and ends at the first non-whitespace (i.e. it hits "A" at the beginning of the buffer). nstart == nend in this case for a single-letter name, and an off-by-one error makes it fail to pick up the name, which makes the entry equivalent to without the name. I do not think this bug affected anything you observed, though. > git shortlog -sne > 1 A > 1 A This is coming from mailmap.c::add_mapping() that downcases the e-mail address. changed_email@example.org is mapped to a@example.org because of this downcasing, while "A " does not have any entry for it in the .mailmap file, so it is given back as-is. Hence we see two distinct entries.