]> source.dussan.org Git - rspamd.git/commitdiff
Some more fixes to actrie match.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 6 Apr 2015 17:28:34 +0000 (18:28 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 6 Apr 2015 17:28:34 +0000 (18:28 +0100)
src/libserver/url.c

index 43ce4c68fdcb01b7432692db378a6cb97fd13a81..a0004d740b2f49723aec71a66f175499bec5c81a 100644 (file)
@@ -1909,22 +1909,24 @@ rspamd_url_trie_callback (int strnum, int textpos, void *context)
        url_match_t m;
        const gchar *pos;
        struct url_callback_data *cb = context;
+       ac_trie_pat_t *pat;
 
        matcher = &g_array_index (url_scanner->matchers, struct url_matcher, strnum);
        if ((matcher->flags & URL_FLAG_NOHTML) && cb->is_html) {
                /* Do not try to match non-html like urls in html texts */
                return 0;
        }
+       pat = &g_array_index (url_scanner->patterns, ac_trie_pat_t, strnum);
 
        m.pattern = matcher->pattern;
        m.prefix = matcher->prefix;
        m.add_prefix = FALSE;
-       pos = cb->begin + textpos;
+       pos = cb->begin + textpos - pat->len;
 
        if (matcher->start (cb->begin, cb->end, pos,
                        &m) && matcher->end (cb->begin, cb->end, pos, &m)) {
                if (m.add_prefix || matcher->prefix[0] != '\0') {
-                       cb->len = m.m_len + strlen (m.prefix);
+                       cb->len = m.m_len + strlen (matcher->prefix) + 1;
                        cb->url_str = rspamd_mempool_alloc (cb->pool, cb->len + 1);
                        rspamd_snprintf (cb->url_str,
                                        cb->len,
@@ -1938,8 +1940,8 @@ rspamd_url_trie_callback (int strnum, int textpos, void *context)
                        rspamd_strlcpy (cb->url_str, m.m_begin, m.m_len + 1);
                }
 
-               cb->start = (gchar *)m.m_begin;
-               cb->fin = (gchar *)m.m_begin + m.m_len;
+               cb->start = m.m_begin;
+               cb->fin = m.m_begin + m.m_len;
 
                return 1;
        }