summaryrefslogtreecommitdiffstats
path: root/src/libutil/multipattern.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2018-11-20 20:44:49 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2018-11-20 20:45:22 +0000
commita45141c003e065341474de0ec0b4310b2f4437c8 (patch)
tree2e9851e15290df805793cf6b51d0a0ae0753c195 /src/libutil/multipattern.c
parentdc506fc54b60f4bcc7390447a0d80bfd6f799e54 (diff)
downloadrspamd-a45141c003e065341474de0ec0b4310b2f4437c8.tar.gz
rspamd-a45141c003e065341474de0ec0b4310b2f4437c8.zip
[Fix] Properly escape utf8 regexps in hyperscan mode
Diffstat (limited to 'src/libutil/multipattern.c')
-rw-r--r--src/libutil/multipattern.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/libutil/multipattern.c b/src/libutil/multipattern.c
index 94b5398b3..e4a39d5fe 100644
--- a/src/libutil/multipattern.c
+++ b/src/libutil/multipattern.c
@@ -193,6 +193,12 @@ rspamd_multipattern_pattern_filter (const gchar *pattern, gsize len,
gchar *ret = NULL;
#ifdef WITH_HYPERSCAN
if (rspamd_hs_check ()) {
+ gint gl_flags = RSPAMD_REGEXP_ESCAPE_ASCII;
+
+ if (flags & RSPAMD_MULTIPATTERN_UTF8) {
+ gl_flags |= RSPAMD_REGEXP_ESCAPE_UTF;
+ }
+
if (flags & RSPAMD_MULTIPATTERN_TLD) {
ret = rspamd_multipattern_escape_tld_hyperscan (pattern, len, dst_len);
}
@@ -201,10 +207,11 @@ rspamd_multipattern_pattern_filter (const gchar *pattern, gsize len,
*dst_len = rspamd_strlcpy (ret, pattern, len + 1);
}
else if (flags & RSPAMD_MULTIPATTERN_GLOB) {
- ret = rspamd_str_regexp_escape (pattern, len, dst_len, TRUE);
+ ret = rspamd_str_regexp_escape (pattern, len, dst_len,
+ gl_flags | RSPAMD_REGEXP_ESCAPE_GLOB);
}
else {
- ret = rspamd_str_regexp_escape (pattern, len, dst_len, FALSE);
+ ret = rspamd_str_regexp_escape (pattern, len, dst_len, gl_flags);
}
return ret;