]> source.dussan.org Git - rspamd.git/commitdiff
[Fix] Fix tld compositon rules
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 25 Feb 2020 17:01:00 +0000 (17:01 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 25 Feb 2020 17:01:00 +0000 (17:01 +0000)
Issue: #3248, #3268

src/libserver/url.c
src/libutil/multipattern.c

index dcf13cfda476a2d789edc21687a677444f83391c..0407490d85fa41f31656989405b96c4ef4e98843 100644 (file)
@@ -442,7 +442,6 @@ rspamd_url_parse_tld_file (const gchar *fname,
 
                flags = URL_FLAG_NOHTML | URL_FLAG_TLD_MATCH;
 
-#ifndef WITH_HYPERSCAN
                if (linebuf[0] == '*') {
                        flags |= URL_FLAG_STAR_MATCH;
                        p = strchr (linebuf, '.');
@@ -456,9 +455,6 @@ rspamd_url_parse_tld_file (const gchar *fname,
                else {
                        p = linebuf;
                }
-#else
-               p = linebuf;
-#endif
 
                m.flags = flags;
                rspamd_multipattern_add_pattern (url_scanner->search_trie, p,
@@ -1553,6 +1549,9 @@ rspamd_tld_trie_callback (struct rspamd_multipattern *mp,
                        ndots--;
                        pos = p + 1;
                }
+               else {
+                       pos = p;
+               }
 
                p--;
        }
index 6eec009b34011d83cbc25b83156265428fb226ce..f243c1d8ab351ecd14e2b06b78236a29496c31b6 100644 (file)
@@ -108,7 +108,6 @@ rspamd_multipattern_escape_tld_hyperscan (const gchar *pattern, gsize slen,
         */
 
        if (pattern[0] == '*') {
-               len = slen + 4;
                p = strchr (pattern, '.');
 
                if (p == NULL) {
@@ -119,12 +118,13 @@ rspamd_multipattern_escape_tld_hyperscan (const gchar *pattern, gsize slen,
                        p ++;
                }
 
-               prefix = ".*.";
+               prefix = "\\.";
+               len = slen + strlen (prefix);
        }
        else {
-               len = slen + 1;
-               prefix = ".";
+               prefix = "\\.";
                p = pattern;
+               len = slen + strlen (prefix);
        }
 
        res = g_malloc (len + 1);
@@ -208,7 +208,7 @@ rspamd_multipattern_pattern_filter (const gchar *pattern, gsize len,
                        tmp = rspamd_multipattern_escape_tld_hyperscan (pattern, len, &tlen);
 
                        ret = rspamd_str_regexp_escape (tmp, tlen, dst_len,
-                                       gl_flags|RSPAMD_REGEXP_ESCAPE_GLOB);
+                                       gl_flags|RSPAMD_REGEXP_ESCAPE_RE);
                        g_free (tmp);
                }
                else if (flags & RSPAMD_MULTIPATTERN_RE) {