Browse Source

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>
maint
Jeff King 5 years ago committed by Junio C Hamano
parent
commit
ffbea1816d
  1. 5
      mailinfo.c
  2. 15
      t/t5100-mailinfo.sh

5
mailinfo.c

@ -351,9 +351,10 @@ static inline int skip_header(const struct strbuf *line, const char *hdr, @@ -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;
}

15
t/t5100-mailinfo.sh

@ -213,4 +213,19 @@ test_expect_failure 'mailinfo -b separated double [PATCH]' ' @@ -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

Loading…
Cancel
Save