aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libmime/mime_parser.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/libmime/mime_parser.c b/src/libmime/mime_parser.c
index e753f6377..ac35cffe3 100644
--- a/src/libmime/mime_parser.c
+++ b/src/libmime/mime_parser.c
@@ -1055,6 +1055,7 @@ rspamd_multipart_boundaries_filter(struct rspamd_task *task,
goffset last_offset;
unsigned int i, sel = 0;
enum rspamd_mime_parse_error ret;
+ bool enforce_closing = false;
last_offset = (multipart->raw_data.begin - st->start) +
multipart->raw_data.len;
@@ -1099,6 +1100,12 @@ rspamd_multipart_boundaries_filter(struct rspamd_task *task,
cur = &g_array_index(st->boundaries, struct rspamd_mime_boundary, i);
if (cur->boundary > last_offset) {
+ /*
+ * We have reached the end of the part, so we have to close it implicitly
+ * like MUA do
+ */
+ task->flags |= RSPAMD_TASK_FLAG_BROKEN_HEADERS;
+ enforce_closing = true;
break;
}
@@ -1136,7 +1143,7 @@ rspamd_multipart_boundaries_filter(struct rspamd_task *task,
}
}
- if (i == st->boundaries->len && cb->cur_boundary) {
+ if (enforce_closing || (i == st->boundaries->len && cb->cur_boundary)) {
/* Process the last part */
struct rspamd_mime_boundary fb;