]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Fix] Include the last character when parsing the last header with no value
authorVsevolod Stakhov <vsevolod@rspamd.com>
Fri, 21 Apr 2023 20:11:11 +0000 (21:11 +0100)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Fri, 21 Apr 2023 20:12:00 +0000 (21:12 +0100)
Issue: #4388

src/libmime/mime_headers.c

index e75a61366cd9a1e4c7983bf70d8fe39d2e331dd7..422c9b8f83399022e6a29e94b5d8434ee04b74af 100644 (file)
@@ -194,7 +194,7 @@ rspamd_mime_headers_process (struct rspamd_task *task,
        const gchar *p, *c, *end;
        gchar *tmp, *tp;
        gint state = 0, l, next_state = 100, err_state = 100, t_state;
-       gboolean valid_folding = FALSE;
+       gboolean valid_folding = FALSE, shift_by_one = FALSE;
        guint nlines_count[RSPAMD_TASK_NEWLINES_MAX];
        guint norder = 0;
 
@@ -410,9 +410,12 @@ rspamd_mime_headers_process (struct rspamd_task *task,
                        break;
                case 5:
                        /* Header has only name, no value */
-                       nh->value = rspamd_mempool_strdup (task->task_pool, "");;
-                       nh->decoded = rspamd_mempool_strdup (task->task_pool, "");;
+                       nh->value = rspamd_mempool_strdup (task->task_pool, "");
+                       nh->decoded = rspamd_mempool_strdup (task->task_pool, "");
                        nh->raw_len = p - nh->raw_value;
+                       if (shift_by_one) {
+                               nh->raw_len ++;
+                       }
                        nh->order = norder ++;
                        rspamd_mime_header_add (task, &target->htb, order_ptr, nh, check_newlines);
                        nh = NULL;
@@ -422,6 +425,8 @@ rspamd_mime_headers_process (struct rspamd_task *task,
                        /* Folding state */
                        if (p + 1 == end) {
                                state = err_state;
+                               /* Include the last character into the next header */
+                               shift_by_one = TRUE;
                        }
                        else {
                                if (*p == '\r' || *p == '\n') {