From: Tim Duesterhus Date: Mon, 22 Jun 2020 20:57:45 +0000 (+0200) Subject: MINOR: cfgparse: Warn on truncated lines / files X-Git-Tag: v2.2-dev11~44 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2fd5bdb439da29f15381aeb57c51327ba57674fc;p=thirdparty%2Fhaproxy.git MINOR: cfgparse: Warn on truncated lines / files 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). --- diff --git a/src/cfgparse.c b/src/cfgparse.c index 4ccca14d2b..257df05a1e 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)) @@ -2058,6 +2071,13 @@ next_line: } } + 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();