diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-04-14 14:01:57 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-04-14 14:01:57 +0100 |
commit | 76752fa67640e798a63fdbff4f243e84ec7dfe5c (patch) | |
tree | a89387c2d93c96cec8c38d14f13184659ad000f0 /src/libmime | |
parent | 9c3b26475dc9cb5d530bb4274bc430a4e68d08cb (diff) | |
download | rspamd-76752fa67640e798a63fdbff4f243e84ec7dfe5c.tar.gz rspamd-76752fa67640e798a63fdbff4f243e84ec7dfe5c.zip |
[Fix] Fix excraction of URLs from Subject
Diffstat (limited to 'src/libmime')
-rw-r--r-- | src/libmime/message.c | 47 |
1 files changed, 8 insertions, 39 deletions
diff --git a/src/libmime/message.c b/src/libmime/message.c index 000b50b78..ed2014ef7 100644 --- a/src/libmime/message.c +++ b/src/libmime/message.c @@ -1567,12 +1567,10 @@ rspamd_message_parse (struct rspamd_task *task) struct mime_text_part *p1, *p2; struct mime_foreach_data md; struct received_header *recv, *trecv; - gchar *url_str; - const gchar *url_end, *p, *end; - struct rspamd_url *subject_url; + const gchar *p; gsize len; goffset hdr_pos; - gint rc, state = 0, diff, *pdiff, i; + gint diff, *pdiff, i; guint tw, dw; tmp = rspamd_mempool_alloc (task->task_pool, sizeof (GByteArray)); @@ -1821,42 +1819,13 @@ rspamd_message_parse (struct rspamd_task *task) /* Parse urls inside Subject header */ cur = rspamd_message_get_header (task, "Subject", FALSE); - if (cur) { - p = cur->data; + + for (; cur != NULL; cur = g_list_next (cur)) { + rh = cur->data; + p = rh->decoded; len = strlen (p); - end = p + len; - - while (p < end) { - /* Search to the end of url */ - if (rspamd_url_find (task->task_pool, p, end - p, NULL, &url_end, - &url_str, FALSE, &state)) { - if (url_str != NULL) { - subject_url = rspamd_mempool_alloc0 (task->task_pool, - sizeof (struct rspamd_url)); - rc = rspamd_url_parse (subject_url, url_str, - strlen (url_str), task->task_pool); - - if ((rc == URI_ERRNO_OK) && subject_url->hostlen > 0) { - if (subject_url->protocol != PROTOCOL_MAILTO) { - if (!g_hash_table_lookup (task->urls, subject_url)) { - g_hash_table_insert (task->urls, - subject_url, - subject_url); - } - } - } - else if (rc != URI_ERRNO_OK) { - msg_info_task ("extract of url '%s' failed: %s", - url_str, - rspamd_url_strerror (rc)); - } - } - } - else { - break; - } - p = url_end + 1; - } + rspamd_url_find_multiple (task->task_pool, p, len, FALSE, + rspamd_url_task_callback, task); } /* Calculate distance for 2-parts messages */ |