From 0a589fde7c67cfaf730e7d8b157b116364690cc0 Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Wed, 22 Jan 2020 14:47:04 +0100 Subject: [PATCH] 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. --- src/http_htx.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/http_htx.c b/src/http_htx.c index d818170f2..accfa19e2 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);