mailinfo: avoid violating strbuf assertion
commite9d7d10a7f17fb9cc6a4d37b6fdf27170f4deede
authorJeff King <peff@peff.net>
Tue, 19 Aug 2008 17:28:24 +0000 (19 13:28 -0400)
committerJunio C Hamano <gitster@pobox.com>
Wed, 20 Aug 2008 02:36:56 +0000 (19 19:36 -0700)
treefd6d405f55a76858d0437a3fba201c17b8a0d975
parentc8c4450e1949055cb57e32425b125f45f3481742
mailinfo: avoid violating strbuf assertion

In handle_from, we calculate the end boundary of a section
to remove from a strbuf using strcspn like this:

  el = strcspn(buf, set_of_end_boundaries);
  strbuf_remove(&sb, start, el + 1);

This works fine if "el" is the offset of the boundary
character, meaning we remove up to and including that
character. But if the end boundary didn't match (that is, we
hit the end of the string as the boundary instead) then we
want just "el". Asking for "el+1" caught an out-of-bounds
assertion in the strbuf library.

This manifested itself when we got a 'From' header that had
just an email address with nothing else in it (the end of
the string was the end of the address, rather than, e.g., a
trailing '>' character), causing git-mailinfo to barf.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin-mailinfo.c
t/t5100-mailinfo.sh
t/t5100/info-from.expect [new file with mode: 0644]
t/t5100/info-from.in [new file with mode: 0644]