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 4ccca14..257df05 100644
--- a/src/cfgparse.c
+++ b/src/cfgparse.c
@@ -1854,6 +1854,7 @@
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 @@
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 @@
/* 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 @@
}
}
+ 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();