As discussed on the list: https://www.mail-archive.com/haproxy@formilux.org/msg37698.html
This patch adds warnings to the configuration parser that detect the following situations: - A line being truncated by a null byte in the middle. - A file not ending in a new line (and possibly being truncated). --- src/cfgparse.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/cfgparse.c b/src/cfgparse.c index 4ccca14d2..2216a469b 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -1854,6 +1854,7 @@ int readcfgfile(const char *file) size_t outlen = 0; size_t outlinesize = 0; int fatal = 0; + int missing_lf = -1; if ((thisline = malloc(sizeof(*thisline) * linesize)) == NULL) { ha_alert("parsing [%s] : out of memory.\n", file); @@ -1872,6 +1873,14 @@ next_line: char *args[MAX_LINE_ARGS + 1]; char *line = thisline; + if (missing_lf != -1) { + ha_warning("parsing [%s:%d]: Stray NUL character at position %d. " + "This will become a hard error in HAProxy 2.3.\n", + file, linenum, (missing_lf + 1)); + err_code |= ERR_WARN; + missing_lf = -1; + } + linenum++; if (fatal >= 50) { @@ -1909,6 +1918,10 @@ next_line: /* kill trailing LF */ *(end - 1) = 0; } + else { + /* mark this line as truncated */ + missing_lf = end - line; + } /* skip leading spaces */ while (isspace((unsigned char)*line)) @@ -2057,6 +2070,13 @@ next_line: goto err; } } + + if (missing_lf != -1) { + ha_warning("parsing [%s:%d]: Missing LF on last line, file might have been truncated at position %d. " + "This will become a hard error in HAProxy 2.3.\n", + file, linenum, (missing_lf + 1)); + err_code |= ERR_WARN; + } if (cs && cs->post_section_parser) err_code |= cs->post_section_parser(); -- 2.27.0