diff options
-rw-r--r-- | src/libmime/mime_parser.c | 9 |
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; |