BUG/MINOR: http-rules: fix release of a failed "set-cookie-fmt" redirect rule
<redirect_rule.cookie> is a union holding either an ist (set-cookie, clear-cookie) or a log-format expression (set-cookie-fmt), and http_free_redirect_rule() picks the member to release from the REDIRECT_FLAG_COOKIE_FMT flag: if ((rdr->flags & REDIRECT_FLAG_COOKIE_FMT)) lf_expr_deinit(&rdr->cookie.fmt); else istfree(&rdr->cookie.str); But http_parse_redirect_rule() accumulates the flags in a local variable and only assigns them with "rule->flags = flags" at the very end, once everything succeeded. So when the log-format string of a "set-cookie-fmt" fails to parse, the "goto err" runs http_free_redirect_rule() on a rule whose ->flags is still 0, and istfree() is called on the <str> member while <fmt> is the live one, leading the process to crash. Let's init the rule members (code, type and flags) as soon as possible, so after the rule allocation. And REDIRECT_FLAG_COOKIE_FMT flag is not set directly on the rule's flags, before the log-format string parsing. This only happens while parsing an invalid configuration, hence no security impact, but a configuration checker must report errors rather than abort. This should be backported to all versions having "set-cookie-fmt", so 2.9 and above.
C
Christopher Faulet committed
0e53d875c78550b91a645d40f28af978af864d69
Parent: d1e6560