From: Christopher Faulet Date: Fri, 30 Nov 2018 12:50:47 +0000 (+0100) Subject: BUG/MINOR: cfgparse: Fix transition between 2 sections with the same name X-Git-Tag: v1.9-dev9~94 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7805e2b;p=thirdparty%2Fhaproxy.git BUG/MINOR: cfgparse: Fix transition between 2 sections with the same name When a section's parser is registered, it can also define a post section callback, called at the end of the section parsing. But when 2 sections with the same name followed each other, the transition between them was missed. This induced 2 bugs. First, the call to the post section callback was skipped. Then, the parsing of the second section was mixed with the first one. This patch must be backported in 1.8. --- diff --git a/src/cfgparse.c b/src/cfgparse.c index 5df53d3480..a28d24cce9 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -1880,32 +1880,31 @@ next_line: list_for_each_entry(ics, §ions, list) { if (strcmp(args[0], ics->section_name) == 0) { cursection = ics->section_name; + pcs = cs; cs = ics; break; } } + if (pcs && pcs->post_section_parser) { + err_code |= pcs->post_section_parser(); + if (err_code & ERR_ABORT) + goto err; + pcs = NULL; + } + if (!cs) { ha_alert("parsing [%s:%d]: unknown keyword '%s' out of section.\n", file, linenum, args[0]); err_code |= ERR_ALERT | ERR_FATAL; } else { - /* else it's a section keyword */ - - if (pcs != cs && pcs && pcs->post_section_parser) { - err_code |= pcs->post_section_parser(); - if (err_code & ERR_ABORT) - goto err; - } - err_code |= cs->section_parser(file, linenum, args, kwm); if (err_code & ERR_ABORT) goto err; } - pcs = cs; } - if (pcs == cs && pcs && pcs->post_section_parser) - err_code |= pcs->post_section_parser(); + if (cs && pcs->post_section_parser) + err_code |= cs->post_section_parser(); err: free(cfg_scope);