From b3e111b4fd99137b6b8c4d687282a497ed082111 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Sat, 26 Nov 2016 15:52:04 +0100 Subject: [PATCH] BUG/MEDIUM: proxy: return "none" and "unknown" for unknown LB algos When a backend doesn't use any known LB algorithm, backend_lb_algo_str() returns NULL. It used to cause "nil" to be printed in the stats dump since version 1.4 but causes 1.7 to try to parse this NULL to encode it as a CSV string, causing a crash on "show stat" in this case. The only situation where this can happen is when "transparent" or "dispatch" are used in a proxy, in which case the LB algorithm is BE_LB_ALGO_NONE. Thus now we explicitly report "none" when this situation is detected, and we preventively report "unknown" if any unknown algorithm is detected, which may happen if such an algo is added in the future and the function is not updated. This fix must be backported to 1.7 and may be backported as far as 1.4, though it has less impact there. --- src/backend.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/backend.c b/src/backend.c index 176a10a4b..d34b5eca1 100644 --- a/src/backend.c +++ b/src/backend.c @@ -1429,8 +1429,10 @@ const char *backend_lb_algo_str(int algo) { return "hdr"; else if (algo == BE_LB_ALGO_RCH) return "rdp-cookie"; + else if (algo == BE_LB_ALGO_NONE) + return "none"; else - return NULL; + return "unknown"; } /* This function parses a "balance" statement in a backend section describing