From: Christopher Faulet Date: Wed, 22 Jan 2020 13:47:04 +0000 (+0100) Subject: MINOR: http-htx: Emit a warning if an error file runs over the buffer's reserve X-Git-Tag: v2.2-dev2~29 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0a589fde7c67cfaf730e7d8b157b116364690cc0;p=thirdparty%2Fhaproxy.git MINOR: http-htx: Emit a warning if an error file runs over the buffer's reserve If an error file is too big and, once converted in HTX, runs over the buffer space reserved to headers rewritting, a warning is emitted. Because a new set of rules will be added to allow headers rewritting on all responses, including HAProxy ones, it is important to always keep this space free for error files. --- diff --git a/src/http_htx.c b/src/http_htx.c index d818170f2b..accfa19e2b 100644 --- a/src/http_htx.c +++ b/src/http_htx.c @@ -1292,6 +1292,33 @@ static int proxy_check_errors(struct proxy *px) return err; } +static int post_check_errors() +{ + struct ebpt_node *node; + struct http_error *http_err; + struct htx *htx; + int err_code = 0; + + node = ebpt_first(&http_error_messages); + while (node) { + http_err = container_of(node, typeof(*http_err), node); + if (b_is_null(&http_err->msg)) + goto next; + htx = htxbuf(&http_err->msg); + if (htx_free_data_space(htx) < global.tune.maxrewrite) { + ha_warning("config: errorfile '%s' runs over the buffer space" + " reserved to headers rewritting. It may lead to internal errors if " + " http-final-response rules are evaluated on this message.\n", + (char *)node->key); + err_code |= ERR_WARN; + } + next: + node = ebpt_next(node); + } + + return err_code; +} + int proxy_dup_default_conf_errors(struct proxy *curpx, struct proxy *defpx, char **errmsg) { struct conf_errors *conf_err, *new_conf_err = NULL; @@ -1436,6 +1463,7 @@ static struct cfg_kw_list cfg_kws = {ILH, { INITCALL1(STG_REGISTER, cfg_register_keywords, &cfg_kws); REGISTER_POST_PROXY_CHECK(proxy_check_errors); +REGISTER_POST_CHECK(post_check_errors); REGISTER_CONFIG_SECTION("http-errors", cfg_parse_http_errors, NULL);