diff options
author | Jeff King <peff@peff.net> | 2020-02-11 12:19:53 -0500 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2020-02-11 10:20:42 -0800 |
commit | ffbea1816dcbce12d4ffb304ddf8993ef611d4f1 (patch) | |
tree | 1f4f5f1bbf325e617985e3a693ae3d88332f9108 | |
parent | mailinfo: simplify parsing of header values (diff) | |
download | tgif-ffbea1816dcbce12d4ffb304ddf8993ef611d4f1.tar.xz |
mailinfo: be more liberal with header whitespace
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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | mailinfo.c | 5 | ||||
-rwxr-xr-x | 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 |