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);
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)) \