stable-bot: Bugfixes waiting for a release 2.1 (4)
Hi, This is a friendly bot that watches fixes pending for the next haproxy-stable release! One such e-mail is sent periodically once patches are waiting in the last maintenance branch, and an ideal release date is computed based on the severity of these fixes and their merge date. Responses to this mail must be sent to the mailing list. Last release 2.1.7 was issued on 2020-06-09. There are currently 4 patches in the queue cut down this way: - 3 MEDIUM, first one merged on 2020-06-12 - 1 MINOR, first one merged on 2020-06-12 Thus the computed ideal release date for 2.1.8 would be 2020-07-10, which is in three weeks or less. The current list of patches in the queue is: - 2.1 - MEDIUM : pattern: fix thread safety of pattern matching - 2.1 - MEDIUM : log: don't hold the log lock during writev() on a file descriptor - 2.1 - MEDIUM : ssl: crt-list must continue parsing on ERR_WARN - 2.1 - MINOR : ssl: fix ssl-{min,max}-ver with openssl < 1.1.0 -- The haproxy stable-bot is freely provided by HAProxy Technologies to help improve the quality of each HAProxy release. If you have any issue with these emails or if you want to suggest some improvements, please post them on the list so that the solutions suiting the most users can be found.
Log the reason for SSL handshake failure
Hello list, after unsuccessful search in the documentation I am asking here if it's possible to somehow make HAProxy log the reason why a SSL handshake failed (especially on a frontend). I am thinking of logging the SSL alert message, for example logging if the message came from the server or the client, the AlertLevel and the alert message: "ft_https/1: SSL handshake failure: C>S fatal certificate_unknown" We've had to deal with the expired AddTrust certificate and saw a lot of logged SSL handshake failures, but since HAProxy doesn't log the reason why a handshake failed we had to use tcpdump to get SSL alert number leading to an aborted SSL handshake. Kind regards, Marcel Menzel
Re: [PATCH v3 0/2] PARSE_ERR_TOOMANY
On Tue, Jun 23, 2020 at 06:56:08PM +0200, Tim Duesterhus wrote: > Willy, > > realized I forgot to update the commit reference in the first patch after the > change now is in cfgparse instead of tools, so here is v3. Only the commit > message changed compared to v2. Just in time :-) Now merged, thanks. Willy
[PATCH v3 1/2] BUG/MINOR: cfgparse: Fix argument reference in PARSE_ERR_TOOMANY message
The returned `arg` value is the number of arguments found, but in case of the error message it's not a valid argument index. Because we know how many arguments we allowed (MAX_LINE_ARGS) we know what to print in the error message, so do just that. Consider a configuration like this: listen foo 1 2 3 [...] 64 65 Then running a configuration check within valgrind reports the following: ==18265== Conditional jump or move depends on uninitialised value(s) ==18265==at 0x56E8B83: vfprintf (vfprintf.c:1631) ==18265==by 0x57B1895: __vsnprintf_chk (vsnprintf_chk.c:63) ==18265==by 0x4A8642: vsnprintf (stdio2.h:77) ==18265==by 0x4A8642: memvprintf (tools.c:3647) ==18265==by 0x4CB8A4: print_message (log.c:1085) ==18265==by 0x4CE0AC: ha_alert (log.c:1128) ==18265==by 0x459E41: readcfgfile (cfgparse.c:1978) ==18265==by 0x507CB5: init (haproxy.c:2029) ==18265==by 0x4182A2: main (haproxy.c:3137) ==18265== ==18265== Use of uninitialised value of size 8 ==18265==at 0x56E576B: _itoa_word (_itoa.c:179) ==18265==by 0x56E912C: vfprintf (vfprintf.c:1631) ==18265==by 0x57B1895: __vsnprintf_chk (vsnprintf_chk.c:63) ==18265==by 0x4A8642: vsnprintf (stdio2.h:77) ==18265==by 0x4A8642: memvprintf (tools.c:3647) ==18265==by 0x4CB8A4: print_message (log.c:1085) ==18265==by 0x4CE0AC: ha_alert (log.c:1128) ==18265==by 0x459E41: readcfgfile (cfgparse.c:1978) ==18265==by 0x507CB5: init (haproxy.c:2029) ==18265==by 0x4182A2: main (haproxy.c:3137) ==18265== ==18265== Conditional jump or move depends on uninitialised value(s) ==18265==at 0x56E5775: _itoa_word (_itoa.c:179) ==18265==by 0x56E912C: vfprintf (vfprintf.c:1631) ==18265==by 0x57B1895: __vsnprintf_chk (vsnprintf_chk.c:63) ==18265==by 0x4A8642: vsnprintf (stdio2.h:77) ==18265==by 0x4A8642: memvprintf (tools.c:3647) ==18265==by 0x4CB8A4: print_message (log.c:1085) ==18265==by 0x4CE0AC: ha_alert (log.c:1128) ==18265==by 0x459E41: readcfgfile (cfgparse.c:1978) ==18265==by 0x507CB5: init (haproxy.c:2029) ==18265==by 0x4182A2: main (haproxy.c:3137) ==18265== ==18265== Conditional jump or move depends on uninitialised value(s) ==18265==at 0x56E91AF: vfprintf (vfprintf.c:1631) ==18265==by 0x57B1895: __vsnprintf_chk (vsnprintf_chk.c:63) ==18265==by 0x4A8642: vsnprintf (stdio2.h:77) ==18265==by 0x4A8642: memvprintf (tools.c:3647) ==18265==by 0x4CB8A4: print_message (log.c:1085) ==18265==by 0x4CE0AC: ha_alert (log.c:1128) ==18265==by 0x459E41: readcfgfile (cfgparse.c:1978) ==18265==by 0x507CB5: init (haproxy.c:2029) ==18265==by 0x4182A2: main (haproxy.c:3137) ==18265== ==18265== Conditional jump or move depends on uninitialised value(s) ==18265==at 0x56E8C59: vfprintf (vfprintf.c:1631) ==18265==by 0x57B1895: __vsnprintf_chk (vsnprintf_chk.c:63) ==18265==by 0x4A8642: vsnprintf (stdio2.h:77) ==18265==by 0x4A8642: memvprintf (tools.c:3647) ==18265==by 0x4CB8A4: print_message (log.c:1085) ==18265==by 0x4CE0AC: ha_alert (log.c:1128) ==18265==by 0x459E41: readcfgfile (cfgparse.c:1978) ==18265==by 0x507CB5: init (haproxy.c:2029) ==18265==by 0x4182A2: main (haproxy.c:3137) ==18265== ==18265== Conditional jump or move depends on uninitialised value(s) ==18265==at 0x56E941A: vfprintf (vfprintf.c:1631) ==18265==by 0x57B1895: __vsnprintf_chk (vsnprintf_chk.c:63) ==18265==by 0x4A8642: vsnprintf (stdio2.h:77) ==18265==by 0x4A8642: memvprintf (tools.c:3647) ==18265==by 0x4CB8A4: print_message (log.c:1085) ==18265==by 0x4CE0AC: ha_alert (log.c:1128) ==18265==by 0x459E41: readcfgfile (cfgparse.c:1978) ==18265==by 0x507CB5: init (haproxy.c:2029) ==18265==by 0x4182A2: main (haproxy.c:3137) ==18265== ==18265== Conditional jump or move depends on uninitialised value(s) ==18265==at 0x56E8CAB: vfprintf (vfprintf.c:1631) ==18265==by 0x57B1895: __vsnprintf_chk (vsnprintf_chk.c:63) ==18265==by 0x4A8642: vsnprintf (stdio2.h:77) ==18265==by 0x4A8642: memvprintf (tools.c:3647) ==18265==by 0x4CB8A4: print_message (log.c:1085) ==18265==by 0x4CE0AC: ha_alert (log.c:1128) ==18265==by 0x459E41: readcfgfile (cfgparse.c:1978) ==18265==by 0x507CB5: init (haproxy.c:2029) ==18265==by 0x4182A2: main (haproxy.c:3137) ==18265== ==18265== Conditional jump or move depends on uninitialised value(s) ==18265==at 0x56E8CE2: vfprintf (vfprintf.c:1631) ==18265==by 0x57B1895: __vsnprintf_chk (vsnprintf_chk.c:63) ==18265==by 0x4A8642: vsnprintf (stdio2.h:77) ==18265==by 0x4A8642: memvprintf (tools.c:3647) ==18265==by 0x4CB8
[PATCH v3 2/2] BUG/MINOR: cfgparse: Fix calculation of position for PARSE_ERR_TOOMANY message
The arguments are relative to the outline, not relative to the input line. This patch fixes up commit 9e1758efbd68c8b1d27e17e2abee110f3ebe which is 2.2 only. No backport needed. --- src/cfgparse.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cfgparse.c b/src/cfgparse.c index 2dc70c844..93faf4565 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -1976,7 +1976,7 @@ next_line: if (err & PARSE_ERR_TOOMANY) { ha_alert("parsing [%s:%d]: too many words, truncating at word %d, position %ld: <%s>.\n", -file, linenum, MAX_LINE_ARGS, (long)(args[MAX_LINE_ARGS-1] - thisline + 1), args[MAX_LINE_ARGS-1]); +file, linenum, MAX_LINE_ARGS, (long)(args[MAX_LINE_ARGS-1] - outline + 1), args[MAX_LINE_ARGS-1]); err_code |= ERR_ALERT | ERR_FATAL; fatal++; goto next_line; -- 2.27.0
[PATCH v3 0/2] PARSE_ERR_TOOMANY
Willy, realized I forgot to update the commit reference in the first patch after the change now is in cfgparse instead of tools, so here is v3. Only the commit message changed compared to v2. Best regards Tim Düsterhus (2): BUG/MINOR: cfgparse: Fix argument reference in PARSE_ERR_TOOMANY message BUG/MINOR: cfgparse: Fix calculation of position for PARSE_ERR_TOOMANY message src/cfgparse.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -- 2.27.0
[PATCH v2 0/2] PARSE_ERR_TOOMANY
Willy, Am 23.06.20 um 17:37 schrieb Willy Tarreau: > On Tue, Jun 23, 2020 at 05:06:27PM +0200, Tim Duesterhus wrote: >> Otherwise `arg++` will be executed for every argument after the maximum, >> returning a bogus value. > > No, it returns the correct one, as documented at the beginning of the > function: > > ... are not updated beyond but the returned >indicates how many were found. > > The purpose was to allow the caller to realloc() its array if it wants > to read all the args. I couldn't find a single case where this arg is > dereferenced inside the function so for me it's OK, but I could very > well miss something. I should read the comment :-) > I think the problem you've spotted is entirely related to what you've > fixed in the second patch in fact. Instead of args[arg-1] we need to > use args[MAX_LINE_ARGS-1] which is the limit we've passed to the > function. And of course your change from thisline to outline is right. Oh, yeah. That's obviously correct, because we know how many arguments we requested. Updated series coming in. Best regards Tim Düsterhus (2): BUG/MINOR: cfgparse: Fix argument reference in PARSE_ERR_TOOMANY message BUG/MINOR: cfgparse: Fix calculation of position for PARSE_ERR_TOOMANY message src/cfgparse.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -- 2.27.0
[PATCH v2 1/2] BUG/MINOR: cfgparse: Fix argument reference in PARSE_ERR_TOOMANY message
The returned `arg` value is the number of arguments found, but in case of the error message it's not a valid argument index. Because we know how many arguments we allowed (MAX_LINE_ARGS) we know what to print in the error message, so do just that. Consider a configuration like this: listen foo 1 2 3 [...] 64 65 Then running a configuration check within valgrind reports the following: ==18265== Conditional jump or move depends on uninitialised value(s) ==18265==at 0x56E8B83: vfprintf (vfprintf.c:1631) ==18265==by 0x57B1895: __vsnprintf_chk (vsnprintf_chk.c:63) ==18265==by 0x4A8642: vsnprintf (stdio2.h:77) ==18265==by 0x4A8642: memvprintf (tools.c:3647) ==18265==by 0x4CB8A4: print_message (log.c:1085) ==18265==by 0x4CE0AC: ha_alert (log.c:1128) ==18265==by 0x459E41: readcfgfile (cfgparse.c:1978) ==18265==by 0x507CB5: init (haproxy.c:2029) ==18265==by 0x4182A2: main (haproxy.c:3137) ==18265== ==18265== Use of uninitialised value of size 8 ==18265==at 0x56E576B: _itoa_word (_itoa.c:179) ==18265==by 0x56E912C: vfprintf (vfprintf.c:1631) ==18265==by 0x57B1895: __vsnprintf_chk (vsnprintf_chk.c:63) ==18265==by 0x4A8642: vsnprintf (stdio2.h:77) ==18265==by 0x4A8642: memvprintf (tools.c:3647) ==18265==by 0x4CB8A4: print_message (log.c:1085) ==18265==by 0x4CE0AC: ha_alert (log.c:1128) ==18265==by 0x459E41: readcfgfile (cfgparse.c:1978) ==18265==by 0x507CB5: init (haproxy.c:2029) ==18265==by 0x4182A2: main (haproxy.c:3137) ==18265== ==18265== Conditional jump or move depends on uninitialised value(s) ==18265==at 0x56E5775: _itoa_word (_itoa.c:179) ==18265==by 0x56E912C: vfprintf (vfprintf.c:1631) ==18265==by 0x57B1895: __vsnprintf_chk (vsnprintf_chk.c:63) ==18265==by 0x4A8642: vsnprintf (stdio2.h:77) ==18265==by 0x4A8642: memvprintf (tools.c:3647) ==18265==by 0x4CB8A4: print_message (log.c:1085) ==18265==by 0x4CE0AC: ha_alert (log.c:1128) ==18265==by 0x459E41: readcfgfile (cfgparse.c:1978) ==18265==by 0x507CB5: init (haproxy.c:2029) ==18265==by 0x4182A2: main (haproxy.c:3137) ==18265== ==18265== Conditional jump or move depends on uninitialised value(s) ==18265==at 0x56E91AF: vfprintf (vfprintf.c:1631) ==18265==by 0x57B1895: __vsnprintf_chk (vsnprintf_chk.c:63) ==18265==by 0x4A8642: vsnprintf (stdio2.h:77) ==18265==by 0x4A8642: memvprintf (tools.c:3647) ==18265==by 0x4CB8A4: print_message (log.c:1085) ==18265==by 0x4CE0AC: ha_alert (log.c:1128) ==18265==by 0x459E41: readcfgfile (cfgparse.c:1978) ==18265==by 0x507CB5: init (haproxy.c:2029) ==18265==by 0x4182A2: main (haproxy.c:3137) ==18265== ==18265== Conditional jump or move depends on uninitialised value(s) ==18265==at 0x56E8C59: vfprintf (vfprintf.c:1631) ==18265==by 0x57B1895: __vsnprintf_chk (vsnprintf_chk.c:63) ==18265==by 0x4A8642: vsnprintf (stdio2.h:77) ==18265==by 0x4A8642: memvprintf (tools.c:3647) ==18265==by 0x4CB8A4: print_message (log.c:1085) ==18265==by 0x4CE0AC: ha_alert (log.c:1128) ==18265==by 0x459E41: readcfgfile (cfgparse.c:1978) ==18265==by 0x507CB5: init (haproxy.c:2029) ==18265==by 0x4182A2: main (haproxy.c:3137) ==18265== ==18265== Conditional jump or move depends on uninitialised value(s) ==18265==at 0x56E941A: vfprintf (vfprintf.c:1631) ==18265==by 0x57B1895: __vsnprintf_chk (vsnprintf_chk.c:63) ==18265==by 0x4A8642: vsnprintf (stdio2.h:77) ==18265==by 0x4A8642: memvprintf (tools.c:3647) ==18265==by 0x4CB8A4: print_message (log.c:1085) ==18265==by 0x4CE0AC: ha_alert (log.c:1128) ==18265==by 0x459E41: readcfgfile (cfgparse.c:1978) ==18265==by 0x507CB5: init (haproxy.c:2029) ==18265==by 0x4182A2: main (haproxy.c:3137) ==18265== ==18265== Conditional jump or move depends on uninitialised value(s) ==18265==at 0x56E8CAB: vfprintf (vfprintf.c:1631) ==18265==by 0x57B1895: __vsnprintf_chk (vsnprintf_chk.c:63) ==18265==by 0x4A8642: vsnprintf (stdio2.h:77) ==18265==by 0x4A8642: memvprintf (tools.c:3647) ==18265==by 0x4CB8A4: print_message (log.c:1085) ==18265==by 0x4CE0AC: ha_alert (log.c:1128) ==18265==by 0x459E41: readcfgfile (cfgparse.c:1978) ==18265==by 0x507CB5: init (haproxy.c:2029) ==18265==by 0x4182A2: main (haproxy.c:3137) ==18265== ==18265== Conditional jump or move depends on uninitialised value(s) ==18265==at 0x56E8CE2: vfprintf (vfprintf.c:1631) ==18265==by 0x57B1895: __vsnprintf_chk (vsnprintf_chk.c:63) ==18265==by 0x4A8642: vsnprintf (stdio2.h:77) ==18265==by 0x4A8642: memvprintf (tools.c:3647) ==18265==by 0x4CB8
[PATCH v2 2/2] BUG/MINOR: cfgparse: Fix calculation of position for PARSE_ERR_TOOMANY message
The arguments are relative to the outline, not relative to the input line. This patch fixes up commit 9e1758efbd68c8b1d27e17e2abee110f3ebe which is 2.2 only. No backport needed. --- src/cfgparse.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cfgparse.c b/src/cfgparse.c index 2dc70c844..93faf4565 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -1976,7 +1976,7 @@ next_line: if (err & PARSE_ERR_TOOMANY) { ha_alert("parsing [%s:%d]: too many words, truncating at word %d, position %ld: <%s>.\n", -file, linenum, MAX_LINE_ARGS, (long)(args[MAX_LINE_ARGS-1] - thisline + 1), args[MAX_LINE_ARGS-1]); +file, linenum, MAX_LINE_ARGS, (long)(args[MAX_LINE_ARGS-1] - outline + 1), args[MAX_LINE_ARGS-1]); err_code |= ERR_ALERT | ERR_FATAL; fatal++; goto next_line; -- 2.27.0
Re: [PATCH 1/2] BUG/MINOR: tools: Leave parse_line after exceeding argsmax
Hi Tim, On Tue, Jun 23, 2020 at 05:06:27PM +0200, Tim Duesterhus wrote: > Otherwise `arg++` will be executed for every argument after the maximum, > returning a bogus value. No, it returns the correct one, as documented at the beginning of the function: ... are not updated beyond but the returned indicates how many were found. The purpose was to allow the caller to realloc() its array if it wants to read all the args. I couldn't find a single case where this arg is dereferenced inside the function so for me it's OK, but I could very well miss something. I think the problem you've spotted is entirely related to what you've fixed in the second patch in fact. Instead of args[arg-1] we need to use args[MAX_LINE_ARGS-1] which is the limit we've passed to the function. And of course your change from thisline to outline is right. Willy
[PATCH 2/2] BUG/MINOR: cfgparse: Fix calculation of position for PARSE_ERR_TOOMANY
The arguments are relative to the outline, not relative to the input line. This patch fixes up commit 9e1758efbd68c8b1d27e17e2abee110f3ebe which is 2.2 only. No backport needed. --- src/cfgparse.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cfgparse.c b/src/cfgparse.c index 257df05a1..e4489b815 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -1976,7 +1976,7 @@ next_line: if (err & PARSE_ERR_TOOMANY) { ha_alert("parsing [%s:%d]: too many words, truncating at word %d, position %ld: <%s>.\n", -file, linenum, arg, (long)(args[arg-1] - thisline + 1), args[arg-1]); +file, linenum, arg, (long)(args[arg-1] - outline + 1), args[arg-1]); err_code |= ERR_ALERT | ERR_FATAL; fatal++; goto next_line; -- 2.27.0
[PATCH 1/2] BUG/MINOR: tools: Leave parse_line after exceeding argsmax
Otherwise `arg++` will be executed for every argument after the maximum, returning a bogus value. Consider a configuration like this: listen foo 1 2 3 [...] 64 65 Then running a configuration check within valgrind reports the following: ==18265== Conditional jump or move depends on uninitialised value(s) ==18265==at 0x56E8B83: vfprintf (vfprintf.c:1631) ==18265==by 0x57B1895: __vsnprintf_chk (vsnprintf_chk.c:63) ==18265==by 0x4A8642: vsnprintf (stdio2.h:77) ==18265==by 0x4A8642: memvprintf (tools.c:3647) ==18265==by 0x4CB8A4: print_message (log.c:1085) ==18265==by 0x4CE0AC: ha_alert (log.c:1128) ==18265==by 0x459E41: readcfgfile (cfgparse.c:1978) ==18265==by 0x507CB5: init (haproxy.c:2029) ==18265==by 0x4182A2: main (haproxy.c:3137) ==18265== ==18265== Use of uninitialised value of size 8 ==18265==at 0x56E576B: _itoa_word (_itoa.c:179) ==18265==by 0x56E912C: vfprintf (vfprintf.c:1631) ==18265==by 0x57B1895: __vsnprintf_chk (vsnprintf_chk.c:63) ==18265==by 0x4A8642: vsnprintf (stdio2.h:77) ==18265==by 0x4A8642: memvprintf (tools.c:3647) ==18265==by 0x4CB8A4: print_message (log.c:1085) ==18265==by 0x4CE0AC: ha_alert (log.c:1128) ==18265==by 0x459E41: readcfgfile (cfgparse.c:1978) ==18265==by 0x507CB5: init (haproxy.c:2029) ==18265==by 0x4182A2: main (haproxy.c:3137) ==18265== ==18265== Conditional jump or move depends on uninitialised value(s) ==18265==at 0x56E5775: _itoa_word (_itoa.c:179) ==18265==by 0x56E912C: vfprintf (vfprintf.c:1631) ==18265==by 0x57B1895: __vsnprintf_chk (vsnprintf_chk.c:63) ==18265==by 0x4A8642: vsnprintf (stdio2.h:77) ==18265==by 0x4A8642: memvprintf (tools.c:3647) ==18265==by 0x4CB8A4: print_message (log.c:1085) ==18265==by 0x4CE0AC: ha_alert (log.c:1128) ==18265==by 0x459E41: readcfgfile (cfgparse.c:1978) ==18265==by 0x507CB5: init (haproxy.c:2029) ==18265==by 0x4182A2: main (haproxy.c:3137) ==18265== ==18265== Conditional jump or move depends on uninitialised value(s) ==18265==at 0x56E91AF: vfprintf (vfprintf.c:1631) ==18265==by 0x57B1895: __vsnprintf_chk (vsnprintf_chk.c:63) ==18265==by 0x4A8642: vsnprintf (stdio2.h:77) ==18265==by 0x4A8642: memvprintf (tools.c:3647) ==18265==by 0x4CB8A4: print_message (log.c:1085) ==18265==by 0x4CE0AC: ha_alert (log.c:1128) ==18265==by 0x459E41: readcfgfile (cfgparse.c:1978) ==18265==by 0x507CB5: init (haproxy.c:2029) ==18265==by 0x4182A2: main (haproxy.c:3137) ==18265== ==18265== Conditional jump or move depends on uninitialised value(s) ==18265==at 0x56E8C59: vfprintf (vfprintf.c:1631) ==18265==by 0x57B1895: __vsnprintf_chk (vsnprintf_chk.c:63) ==18265==by 0x4A8642: vsnprintf (stdio2.h:77) ==18265==by 0x4A8642: memvprintf (tools.c:3647) ==18265==by 0x4CB8A4: print_message (log.c:1085) ==18265==by 0x4CE0AC: ha_alert (log.c:1128) ==18265==by 0x459E41: readcfgfile (cfgparse.c:1978) ==18265==by 0x507CB5: init (haproxy.c:2029) ==18265==by 0x4182A2: main (haproxy.c:3137) ==18265== ==18265== Conditional jump or move depends on uninitialised value(s) ==18265==at 0x56E941A: vfprintf (vfprintf.c:1631) ==18265==by 0x57B1895: __vsnprintf_chk (vsnprintf_chk.c:63) ==18265==by 0x4A8642: vsnprintf (stdio2.h:77) ==18265==by 0x4A8642: memvprintf (tools.c:3647) ==18265==by 0x4CB8A4: print_message (log.c:1085) ==18265==by 0x4CE0AC: ha_alert (log.c:1128) ==18265==by 0x459E41: readcfgfile (cfgparse.c:1978) ==18265==by 0x507CB5: init (haproxy.c:2029) ==18265==by 0x4182A2: main (haproxy.c:3137) ==18265== ==18265== Conditional jump or move depends on uninitialised value(s) ==18265==at 0x56E8CAB: vfprintf (vfprintf.c:1631) ==18265==by 0x57B1895: __vsnprintf_chk (vsnprintf_chk.c:63) ==18265==by 0x4A8642: vsnprintf (stdio2.h:77) ==18265==by 0x4A8642: memvprintf (tools.c:3647) ==18265==by 0x4CB8A4: print_message (log.c:1085) ==18265==by 0x4CE0AC: ha_alert (log.c:1128) ==18265==by 0x459E41: readcfgfile (cfgparse.c:1978) ==18265==by 0x507CB5: init (haproxy.c:2029) ==18265==by 0x4182A2: main (haproxy.c:3137) ==18265== ==18265== Conditional jump or move depends on uninitialised value(s) ==18265==at 0x56E8CE2: vfprintf (vfprintf.c:1631) ==18265==by 0x57B1895: __vsnprintf_chk (vsnprintf_chk.c:63) ==18265==by 0x4A8642: vsnprintf (stdio2.h:77) ==18265==by 0x4A8642: memvprintf (tools.c:3647) ==18265==by 0x4CB8A4: print_message (log.c:1085) ==18265==by 0x4CE0AC: ha_alert (log.c:1128) ==18265==by 0x459E41: readcfgfile (cfgparse.c:1978) ==18