From 11b20dddd83e3d15b4a50e7b65b280f303664dae Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Tue, 2 Jun 2015 19:43:24 +0100 Subject: [PATCH] Adopt for the new headers structure. --- src/libmime/message.c | 25 ++++++++++++++----------- src/libserver/dkim.c | 9 ++++++--- src/lua/lua_task.c | 4 ++-- 3 files changed, 22 insertions(+), 16 deletions(-) diff --git a/src/libmime/message.c b/src/libmime/message.c index 788efad559..4ca4634221 100644 --- a/src/libmime/message.c +++ b/src/libmime/message.c @@ -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); diff --git a/src/libserver/dkim.c b/src/libserver/dkim.c index a171274e95..709180817d 100644 --- a/src/libserver/dkim.c +++ b/src/libserver/dkim.c @@ -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); diff --git a/src/lua/lua_task.c b/src/lua/lua_task.c index 726af2cb18..26ef753202 100644 --- a/src/lua/lua_task.c +++ b/src/lua/lua_task.c @@ -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 { -- 2.47.3