git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 3/4] mailinfo: be more liberal with header whitespace

From
Jeff King <peff@peff.net>
Date
Feb 11, 2020, 17:19 UTC
Message-ID
<20200211171953.GC2119034@coredump.intra.peff.net>
In-Reply-To
<20200211171649.GB2118476@coredump.intra.peff.net>

RFC822 and friends allow arbitrary whitespace after the colon of a header and before the values. I.e.:

  Subject:foo
  Subject: foo
  Subject:  foo

all have the subject "foo". But mailinfo requires exactly one space. This doesn't seem to be bothering anybody, but it is pickier than the standard specifies. And we can easily just soak up arbitrary whitespace there in our parser, so let's do so.

Note that the test covers both too little and too much whitespace, but the "too much" case already works fine (because we later eat leading and trailing whitespace from the values).

Signed-off-by: Jeff King <peff@peff.net>
---
 mailinfo.c          |  5 +++--
 t/t5100-mailinfo.sh | 15 +++++++++++++++
 2 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/mailinfo.c b/mailinfo.c
index ee8d05e239..78f06da524 100644
--- a/mailinfo.c
+++ b/mailinfo.c
@@ -351,9 +351,10 @@ static inline int skip_header(const struct strbuf *line, const char *hdr,
 {
 	const char *val;
 	if (!skip_iprefix(line->buf, hdr, &val) ||
-	    *val++ != ':' ||
-	    !isspace(*val++))
+	    *val++ != ':')
 		return 0;
+	while (isspace(*val))
+		val++;
 	*outval = val;
 	return 1;
 }
diff --git a/t/t5100-mailinfo.sh b/t/t5100-mailinfo.sh
index 9690dcad4f..147e616533 100755
--- a/t/t5100-mailinfo.sh
+++ b/t/t5100-mailinfo.sh
@@ -213,4 +213,19 @@ test_expect_failure 'mailinfo -b separated double [PATCH]' '
 	test z"$subj" = z"Subject: [other] message"
 '
 
+test_expect_success 'mailinfo handles unusual header whitespace' '
+	git mailinfo /dev/null /dev/null >actual <<-\EOF &&
+	From:Real Name <user@example.com>
+	Subject:    extra spaces
+	EOF
+
+	cat >expect <<-\EOF &&
+	Author: Real Name
+	Email: user@example.com
+	Subject: extra spaces
+
+	EOF
+	test_cmp expect actual
+'
+
 test_done
-- 
2.25.0.708.g4c6f45973e
Previous: Jeff KingNext: Jeff King
Message 17 of 23 in “strbuf: add and use strbuf_insertstr()”
  1. strbuf: add and use strbuf_insertstr()René Scharfe, Feb 8, 2020
  2. Taylor BlauFeb 8, 2020
  3. René ScharfeFeb 9, 2020
  4. Eric SunshineFeb 9, 2020
  5. René ScharfeFeb 9, 2020
  6. strbuf: add and use strbuf_insertstr()René Scharfe, Feb 9, 2020
  7. Eric SunshineFeb 9, 2020
  8. René ScharfeFeb 9, 2020
  9. Eric SunshineFeb 9, 2020
  10. Taylor BlauFeb 9, 2020
  11. Jeff KingFeb 10, 2020
  12. Junio C HamanoFeb 11, 2020
  13. 0/4 some more mailinfo cleanupsJeff King, Feb 11, 2020
  14. 1/4 mailinfo: treat header values as C stringsJeff King, Feb 11, 2020
  15. Eric SunshineFeb 11, 2020
  16. 2/4 mailinfo: simplify parsing of header valuesJeff King, Feb 11, 2020
  17. 3/4 mailinfo: be more liberal with header whitespaceJeff King, Feb 11, 2020
  18. 4/4 mailinfo: factor out some repeated header handlingJeff King, Feb 11, 2020
  19. René ScharfeFeb 11, 2020
  20. Jeff KingFeb 11, 2020
  21. 2/1 mailinfo: don't insert header prefix for handle_content_type()René Scharfe, Feb 10, 2020
  22. Junio C HamanoFeb 10, 2020
  23. Taylor BlauFeb 10, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.