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).
This commit is contained in:
Tim Duesterhus 2020-06-22 22:57:45 +02:00 committed by Willy Tarreau
parent 70f58997f4
commit 2fd5bdb439

View File

@ -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();