From 5f775f8c3d916bf09c5791518b73d2cc548cf89b Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Fri, 7 Feb 2020 12:31:50 +0000 Subject: [PATCH] [Fix] Fix all headers iteration --- src/libmime/mime_parser.c | 20 ++++++++++++++++++++ src/lua/lua_mimepart.c | 2 +- src/lua/lua_task.c | 2 +- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/libmime/mime_parser.c b/src/libmime/mime_parser.c index d989a8e2e..ce8162401 100644 --- a/src/libmime/mime_parser.c +++ b/src/libmime/mime_parser.c @@ -707,6 +707,11 @@ rspamd_mime_process_multipart_node (struct rspamd_task *task, npart->raw_headers_str, npart->raw_headers_len, FALSE); + + /* Preserve the natural order */ + if (npart->headers_order) { + LL_REVERSE2 (npart->headers_order, ord_next); + } } hdr = rspamd_message_get_header_from_hash (npart->raw_headers, @@ -1265,6 +1270,11 @@ rspamd_mime_parse_message (struct rspamd_task *task, TRUE); npart->raw_headers = rspamd_message_headers_ref ( MESSAGE_FIELD (task, raw_headers)); + + /* Preserve the natural order */ + if (MESSAGE_FIELD (task, headers_order)) { + LL_REVERSE2 (MESSAGE_FIELD (task, headers_order), ord_next); + } } hdr = rspamd_message_get_header_from_hash ( @@ -1290,6 +1300,11 @@ rspamd_mime_parse_message (struct rspamd_task *task, TRUE); npart->raw_headers = rspamd_message_headers_ref ( MESSAGE_FIELD (task, raw_headers)); + + /* Preserve the natural order */ + if (MESSAGE_FIELD (task, headers_order)) { + LL_REVERSE2 (MESSAGE_FIELD (task, headers_order), ord_next); + } } hdr = rspamd_message_get_header_from_hash ( @@ -1341,6 +1356,11 @@ rspamd_mime_parse_message (struct rspamd_task *task, npart->raw_headers_str, npart->raw_headers_len, FALSE); + + /* Preserve the natural order */ + if (npart->headers_order) { + LL_REVERSE2 (npart->headers_order, ord_next); + } } hdr = rspamd_message_get_header_from_hash (npart->raw_headers, diff --git a/src/lua/lua_mimepart.c b/src/lua/lua_mimepart.c index 7ce6d251d..81e8bed59 100644 --- a/src/lua/lua_mimepart.c +++ b/src/lua/lua_mimepart.c @@ -2011,7 +2011,7 @@ lua_mimepart_headers_foreach (lua_State *L) if (part->headers_order) { hdr = part->headers_order; - LL_FOREACH (hdr, cur) { + LL_FOREACH2 (hdr, cur, ord_next) { if (re && re->re) { if (!rspamd_regexp_match (re->re, cur->name, strlen (cur->name),FALSE)) { diff --git a/src/lua/lua_task.c b/src/lua/lua_task.c index 58fbc1932..7fd99a553 100644 --- a/src/lua/lua_task.c +++ b/src/lua/lua_task.c @@ -6269,7 +6269,7 @@ lua_task_headers_foreach (lua_State *L) if (MESSAGE_FIELD (task, headers_order)) { hdr = MESSAGE_FIELD (task, headers_order); - LL_FOREACH (hdr, cur) { + LL_FOREACH2 (hdr, cur, ord_next) { if (re && re->re) { if (!rspamd_regexp_match (re->re, cur->name, strlen (cur->name), FALSE)) { -- 2.39.5