Commit 79831fda authored by David Gibson's avatar David Gibson

rfc822: Fix bug parsing headers when body begins with linear whitespace

next_header_parse() had a bug which would mis-parse an extra header if the
body of the message began with a linear whitespace character (space or
tab).  This patch fixes it and adds a suitable testcase.
Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
parent 07962f1c
......@@ -150,29 +150,33 @@ static struct rfc822_header *next_header_parse(struct rfc822_msg *msg)
if (msg->body && (msg->remainder >= msg->body))
return NULL;
eh = h = msg->remainder;
do {
eh = next_line(eh, msg->end);
} while ((eh < msg->end) && rfc822_iswsp(*eh));
if (eh >= msg->end)
msg->remainder = NULL;
else
msg->remainder = eh;
h = msg->remainder;
eh = next_line(h, msg->end);
ev = eh;
if ((ev > h) && (ev[-1] == '\n'))
ev--;
if ((ev > h) && (ev[-1] == '\r'))
ev--;
if (ev == h) {
/* Found the end of the headers */
assert(!msg->body || (msg->body == eh));
if (eh < msg->end)
msg->body = eh;
return NULL;
}
while ((eh < msg->end) && rfc822_iswsp(*eh))
eh = next_line(eh, msg->end);
if (eh >= msg->end)
msg->remainder = NULL;
else
msg->remainder = eh;
hi = talloc_zero(msg, struct rfc822_header);
ALLOC_CHECK(hi, NULL);
......
......@@ -53,11 +53,15 @@ AEXAMPLE(test_msg_nlnl_crlf);
const char test_msg_nlnl_mixed_body[] = "Message containing both \n\n and \r\n\r\n inside body\n\r\n";
AEXAMPLE(test_msg_nlnl_mixed);
#define test_msg_space_body_hdrs test_msg_1_hdrs
const char test_msg_space_body_body[] = " Message with LWS at start of body\n";
AEXAMPLE(test_msg_space_body);
#define for_each_aexample(_e) \
foreach_ptr((_e), &test_msg_1, &test_msg_empty_body, \
&test_msg_nlnl_lf, &test_msg_nlnl_crlf, \
&test_msg_nlnl_mixed)
&test_msg_nlnl_mixed, \
&test_msg_space_body)
#define for_each_aexample_buf(_e, _buf, _len) \
for_each_aexample((_e)) \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment