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);
continue;
}
+ hs_flags[i] = 0;
+
if (pcre_flags & PCRE_UTF8) {
hs_flags[i] |= HS_FLAG_UTF8;
}
* + `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);
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
* + `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) {
"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);
}