[BUG] config: fix wrong handling of too large argument count
Holger Just reported that running ACLs with too many args caused
a segfault during config parsing. This is caused by a wrong test
on argument count. In case of too many arguments on a config line,
the last one was not correctly zeroed. This is now done and we
report the error indicating what part had been truncated.
(cherry picked from commit 3b39c1446b9bd842324e87782a836948a07c25a2)
diff --git a/src/cfgparse.c b/src/cfgparse.c
index eb7db0f..91a20bd 100644
--- a/src/cfgparse.c
+++ b/src/cfgparse.c
@@ -3996,6 +3996,21 @@
if (!**args)
continue;
+ if (*line) {
+ /* we had to stop due to too many args.
+ * Let's terminate the string, print the offending part then cut the
+ * last arg.
+ */
+ while (*line && *line != '#' && *line != '\n' && *line != '\r')
+ line++;
+ *line = '\0';
+
+ Alert("parsing [%s:%d]: line too long, truncating at word %d, position %d : <%s>.\n",
+ file, linenum, arg + 1, args[arg] - thisline + 1, args[arg]);
+ err_code |= ERR_ALERT | ERR_FATAL;
+ args[arg] = line;
+ }
+
/* zero out remaining args and ensure that at least one entry
* is zeroed out.
*/