From: Vsevolod Stakhov Date: Wed, 3 Feb 2016 11:29:34 +0000 (+0000) Subject: Fix parsing nested braces inside logger vars X-Git-Tag: 1.1.3~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7dec4387d73370389f322e422cb590262b4c9dea;p=thirdparty%2Frspamd.git Fix parsing nested braces inside logger vars --- diff --git a/src/libserver/cfg_utils.c b/src/libserver/cfg_utils.c index b6b44036ec..7551e64ef4 100644 --- a/src/libserver/cfg_utils.c +++ b/src/libserver/cfg_utils.c @@ -421,6 +421,7 @@ rspamd_config_parse_log_format (struct rspamd_config *cfg) parse_var_name, parse_var_content, } state = parse_str; + gint braces = 0; g_assert (cfg != NULL); c = cfg->log_format_str; @@ -478,6 +479,7 @@ rspamd_config_parse_log_format (struct rspamd_config *cfg) p ++; c = p; state = parse_var_content; + braces = 1; } else if (*p != '_' && *p != '-' && !g_ascii_isalnum (*p)) { /* Variable with no content */ @@ -496,7 +498,7 @@ rspamd_config_parse_log_format (struct rspamd_config *cfg) } break; case parse_var_content: - if (*p == '}') { + if (*p == '}' && --braces == 0) { var_content.begin = c; var_content.len = p - c; p ++; @@ -508,6 +510,10 @@ rspamd_config_parse_log_format (struct rspamd_config *cfg) state = parse_str; } + else if (*p == '{') { + braces ++; + p ++; + } else { p++; }