]> source.dussan.org Git - rspamd.git/commitdiff
Allow caseless trie search.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 7 Apr 2015 10:54:11 +0000 (11:54 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 7 Apr 2015 14:04:28 +0000 (15:04 +0100)
contrib/aho-corasick/acism.c
contrib/aho-corasick/acism.h
src/libserver/url.c

index a4c67815445437acbf2c9a0ce1db7c631e518272..64e1eb956a1ec59f9ccb268fe5e8b6dfc3f6e28d 100644 (file)
 
 int
 acism_lookup(ac_trie_t const *psp, const char *text, size_t len,
-           ACISM_ACTION *cb, void *context, int *statep)
+           ACISM_ACTION *cb, void *context, int *statep, bool caseless)
 {
     ac_trie_t const ps = *psp;
     char const *cp = text, *endp = cp + len;
+    uint8_t s;
     STATE state = *statep;
     int ret = 0;
 
     while (cp < endp) {
-        _SYMBOL sym = ps.symv[(uint8_t)*cp++];
+       s = caseless ? g_ascii_tolower (*cp++) : *cp++;
+        _SYMBOL sym = ps.symv[s];
         if (!sym) {
             // Input byte is not in any pattern string.
             state = ROOT;
index 3886b149ee41be974a4cd2d32d62aff6bd401a42..d942fd413a1a11ee282ae327a1674dbf000a4f30 100644 (file)
@@ -46,6 +46,6 @@ typedef int (ACISM_ACTION)(int strnum, int textpos, void *context);
 // *state should initially be (0).
 
 int acism_lookup(ac_trie_t const *psp, const char *text, size_t len,
-           ACISM_ACTION *cb, void *context, int *statep);
+           ACISM_ACTION *cb, void *context, int *statep, bool caseless);
 
 #endif//ACISM_H
index b29fcfc1f3fe8de76d46fbacc1d11b1ea572eeb0..41ecb7dd2633fdfefd9a1a2ca5e137902b476afb 100644 (file)
@@ -1430,7 +1430,7 @@ rspamd_url_find (rspamd_mempool_t *pool,
        cb.is_html = is_html;
        cb.pool = pool;
        ret = acism_lookup (url_scanner->search_trie, begin, len,
-                       rspamd_url_trie_callback, &cb, statep);
+                       rspamd_url_trie_callback, &cb, statep, true);
 
        if (ret) {
                if (start) {