From: Vsevolod Stakhov Date: Fri, 22 Jul 2016 12:29:50 +0000 (+0100) Subject: [Fix] Fix long regexp flags (e.g. {sa_body}) X-Git-Tag: 1.3.0~15 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=cb9f7934192eb974d287581d4ff997e3b1a25716;p=thirdparty%2Frspamd.git [Fix] Fix long regexp flags (e.g. {sa_body}) --- diff --git a/src/libmime/mime_expressions.c b/src/libmime/mime_expressions.c index 335346e893..647e43f0e7 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 ++;