summaryrefslogtreecommitdiffstats
path: root/src/libmime/mime_expressions.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libmime/mime_expressions.c')
-rw-r--r--src/libmime/mime_expressions.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/libmime/mime_expressions.c b/src/libmime/mime_expressions.c
index 335346e89..647e43f0e 100644
--- a/src/libmime/mime_expressions.c
+++ b/src/libmime/mime_expressions.c
@@ -373,6 +373,8 @@ rspamd_mime_expr_parse_regexp_atom (rspamd_mempool_t * pool, const gchar *line,
/* Long definition */
if ((brace = strchr (p + 1, '}')) != NULL) {
if (!rspamd_parse_long_option (p + 1, brace - (p + 1), result)) {
+ msg_warn_pool ("invalid long regexp type: %*s in '%s'",
+ (int)(brace - (p + 1)), p + 1, src);
p = NULL;
}
else {
@@ -586,6 +588,7 @@ rspamd_mime_expr_parse (const gchar *line, gsize len,
got_backslash,
got_second_slash,
in_flags,
+ in_flags_brace,
got_obrace,
in_function,
got_ebrace,
@@ -638,13 +641,23 @@ rspamd_mime_expr_parse (const gchar *line, gsize len,
state = in_flags;
break;
case in_flags:
- if (!g_ascii_isalpha (t)) {
+ if (t == '{') {
+ state = in_flags_brace;
+ p ++;
+ }
+ else if (!g_ascii_isalpha (t)) {
state = end_atom;
}
else {
p ++;
}
break;
+ case in_flags_brace:
+ if (t == '}') {
+ state = in_flags;
+ }
+ p ++;
+ break;
case got_backslash:
state = prev_state;
p ++;