From 74059e7f272613b677c90df1a428047d6bb0182d Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Thu, 10 Dec 2015 16:11:21 +0000 Subject: [PATCH] Add pcre_only option to re_cache registration --- src/libserver/re_cache.c | 3 ++- src/lua/lua_config.c | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/libserver/re_cache.c b/src/libserver/re_cache.c index 8d728b02e8..18c463db55 100644 --- a/src/libserver/re_cache.c +++ b/src/libserver/re_cache.c @@ -1043,7 +1043,6 @@ rspamd_re_cache_compile_hyperscan (struct rspamd_re_cache *cache, while (g_hash_table_iter_next (&cit, &k, &v)) { re = v; - hs_flags[i] = 0; pcre_flags = rspamd_regexp_get_pcre_flags (re); re_flags = rspamd_regexp_get_flags (re); @@ -1052,6 +1051,8 @@ rspamd_re_cache_compile_hyperscan (struct rspamd_re_cache *cache, continue; } + hs_flags[i] = 0; + if (pcre_flags & PCRE_UTF8) { hs_flags[i] |= HS_FLAG_UTF8; } diff --git a/src/lua/lua_config.c b/src/lua/lua_config.c index e079517a4e..0e61ead07e 100644 --- a/src/lua/lua_config.c +++ b/src/lua/lua_config.c @@ -363,6 +363,7 @@ LUA_FUNCTION_DEF (config, newindex); * + `body`: raw body regexp * + `url`: url regexp * - `header`: for header and rawheader regexp means the name of header + * - `pcre_only`: flag regexp as pcre only regexp */ LUA_FUNCTION_DEF (config, register_regexp); @@ -1567,6 +1568,8 @@ lua_config_register_regexp (lua_State *L) gsize header_len = 0; GError *err = NULL; enum rspamd_re_type type = RSPAMD_RE_BODY; + gboolean pcre_only = FALSE; + guint old_flags; /* * - `re`* : regular expression object @@ -1578,11 +1581,12 @@ lua_config_register_regexp (lua_State *L) * + `body`: raw body regexp * + `url`: url regexp * - `header`: for header and rawheader regexp means the name of header + * - `pcre_only`: allow merely pcre for this regexp */ if (cfg != NULL) { if (!rspamd_lua_parse_table_arguments (L, 2, &err, - "*re=U{regexp};*type=S;header=V", - &re, &type_str, &header_len, &header_str)) { + "*re=U{regexp};*type=S;header=V;pcre_only=B", + &re, &type_str, &header_len, &header_str, &pcre_only)) { msg_err_config ("cannot get parameters list: %e", err); if (err) { @@ -1598,6 +1602,12 @@ lua_config_register_regexp (lua_State *L) "header argument is mandatory for header/rawheader regexps"); } else { + if (pcre_only) { + old_flags = rspamd_regexp_get_flags (re->re); + old_flags |= RSPAMD_REGEXP_FLAG_PCRE_ONLY; + rspamd_regexp_set_flags (re->re, old_flags); + } + rspamd_re_cache_add (cfg->re_cache, re->re, type, (gpointer) header_str, header_len); } -- 2.47.3