]> source.dussan.org Git - rspamd.git/commitdiff
Adopt for the new headers structure.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 2 Jun 2015 18:43:24 +0000 (19:43 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 2 Jun 2015 18:43:24 +0000 (19:43 +0100)
src/libmime/message.c
src/libserver/dkim.c
src/lua/lua_task.c

index 788efad5594059bd0e22bb0926bec88277026b5d..4ca4634221f3b3738a268cb7938de5f442b81fed 100644 (file)
@@ -638,7 +638,8 @@ append_raw_header (GHashTable *target, struct raw_header *rh)
 
 /* Convert raw headers to a list of struct raw_header * */
 static void
-process_raw_headers (struct rspamd_task *task)
+process_raw_headers (struct rspamd_task *task, GHashTable *target,
+               const gchar *in, gsize len)
 {
        struct raw_header *new = NULL;
        const gchar *p, *c, *end;
@@ -646,8 +647,8 @@ process_raw_headers (struct rspamd_task *task)
        gint state = 0, l, next_state = 100, err_state = 100, t_state;
        gboolean valid_folding = FALSE;
 
-       p = task->raw_headers_content.begin;
-       end = p + task->raw_headers_content.len;
+       p = in;
+       end = p + len;
        c = p;
 
        while (p < end) {
@@ -778,14 +779,14 @@ process_raw_headers (struct rspamd_task *task)
                        new->decoded = g_mime_utils_header_decode_text (new->value);
                        rspamd_mempool_add_destructor (task->task_pool,
                                        (rspamd_mempool_destruct_t)g_free, new->decoded);
-                       append_raw_header (task->raw_headers, new);
+                       append_raw_header (target, new);
                        state = 0;
                        break;
                case 5:
                        /* Header has only name, no value */
                        new->value = "";
                        new->decoded = NULL;
-                       append_raw_header (task->raw_headers, new);
+                       append_raw_header (target, new);
                        state = 0;
                        break;
                case 99:
@@ -1494,8 +1495,8 @@ mime_foreach_callback (GMimeObject * part, gpointer user_data)
                                        (rspamd_mempool_destruct_t) g_hash_table_destroy,
                                        mime_part->raw_headers);
                                if (hdrs != NULL) {
-                                       process_raw_headers (mime_part->raw_headers,
-                                                       task->task_pool, hdrs);
+                                       process_raw_headers (task, mime_part->raw_headers,
+                                                       hdrs, strlen (hdrs));
                                        g_free (hdrs);
                                }
 
@@ -1640,10 +1641,12 @@ rspamd_message_parse (struct rspamd_task *task)
                hdr_end = g_mime_parser_get_headers_end (parser);
                if (hdr_start != -1 && hdr_end != -1) {
                        g_assert (hdr_start < hdr_end);
-                       g_assert (hdr_end < len);
-                       task->raw_headers_content.begin = p + hdr_start;
-                       task->raw_headers_content.len = hdr_end - hdr_start;
-                       process_raw_headers (task);
+                       g_assert (hdr_end < (gint64)len);
+                       task->raw_headers_content.begin = (gchar *)(p + hdr_start);
+                       task->raw_headers_content.len = (guint64)(hdr_end - hdr_start);
+                       process_raw_headers (task, task->raw_headers,
+                                       task->raw_headers_content.begin,
+                                       task->raw_headers_content.len);
                }
 
                process_images (task);
index a171274e95025e8ca30425037b0eb242d66978cc..709180817d7dc0452826e71db655427a15c8e81f 100644 (file)
@@ -1378,11 +1378,12 @@ struct rspamd_dkim_sign_chunk {
 static gboolean
 rspamd_dkim_canonize_header_simple (rspamd_dkim_context_t *ctx,
        const gchar *headers,
+       gsize headers_length,
        const gchar *header_name,
        guint count,
        gboolean is_sign)
 {
-       const gchar *p, *c;
+       const gchar *p, *c, *end;
        gint state = 0, hlen;
        gboolean found = FALSE;
        GArray *to_sign;
@@ -1396,10 +1397,11 @@ rspamd_dkim_canonize_header_simple (rspamd_dkim_context_t *ctx,
                        sizeof (struct rspamd_dkim_sign_chunk),
                        count);
        p = headers;
+       end = p + headers_length;
        c = p;
        hlen = strlen (header_name);
 
-       while (*p) {
+       while (p < end) {
                switch (state) {
                case 0:
                        /* Compare state */
@@ -1508,7 +1510,8 @@ rspamd_dkim_canonize_header (rspamd_dkim_context_t *ctx,
 
        if (ctx->header_canon_type == DKIM_CANON_SIMPLE) {
                return rspamd_dkim_canonize_header_simple (ctx,
-                                  task->raw_headers_str,
+                                  task->raw_headers_content.begin,
+                                  task->raw_headers_content.len,
                                   header_name,
                                   count,
                                   is_sig);
index 726af2cb18ed4f97b1d079acaf2bf5f18b43f573..26ef75320212be0faa18392bb7df89214a84a1a6 100644 (file)
@@ -1138,8 +1138,8 @@ lua_task_get_raw_headers (lua_State *L)
        if (task) {
                t = lua_newuserdata (L, sizeof (*t));
                rspamd_lua_setclass (L, "rspamd{text}", -1);
-               t->start = task->raw_headers_str;
-               t->len = strlen (t->start);
+               t->start = task->raw_headers_content.begin;
+               t->len = task->raw_headers_content.len;
                t->own = FALSE;
        }
        else {