aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2020-02-07 12:31:50 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2020-02-07 12:31:50 +0000
commit5f775f8c3d916bf09c5791518b73d2cc548cf89b (patch)
treee87a0d1b3fa98a6a5f356c599cb5369988eb218e
parent3ced568c329cfcf49b8cd7dd39692eb6767515c1 (diff)
downloadrspamd-5f775f8c3d916bf09c5791518b73d2cc548cf89b.tar.gz
rspamd-5f775f8c3d916bf09c5791518b73d2cc548cf89b.zip
[Fix] Fix all headers iteration
-rw-r--r--src/libmime/mime_parser.c20
-rw-r--r--src/lua/lua_mimepart.c2
-rw-r--r--src/lua/lua_task.c2
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)) {