From: Vsevolod Stakhov Date: Fri, 7 Feb 2020 12:31:50 +0000 (+0000) Subject: [Fix] Fix all headers iteration X-Git-Tag: 2.4~89 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=5f775f8c3d916bf09c5791518b73d2cc548cf89b;p=rspamd.git [Fix] Fix all headers iteration --- 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)) {