From d37be30c8840521a31ebfb8cec6ef37e74cb0e03 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Tue, 24 Jun 2025 08:24:28 +0200 Subject: [PATCH] MEDIUM: config: now reject configs with empty arguments As prepared during 3.2, we must error on empty arguments because they mark the end of the line and cause subsequent arguments to be silently ignored. It was too late in 3.2 to turn that into an error so it's a warning, but for 3.3 it needed to be an alert. This patch does that. It doesn't instantly break, instead it counts one fatal error per violating line. This allows to emit several errors at once, which can often be caused by the same variable being missed, or a group of variables sharing a same misspelled prefix for example. Tests show that it helps locate them better. It also explains what to look for in the config manual for help with variables expansion. --- src/cfgparse.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/cfgparse.c b/src/cfgparse.c index a1ea79c5c..2374b2cb3 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -2086,9 +2086,14 @@ next_line: /* sanitize input line in-place */ newpos = sanitize_for_printing(line, errptr - line, 80); - ha_warning("parsing [%s:%d]: argument number %d at position %d is empty and marks the end of the " - "argument list; all subsequent arguments will be ignored:\n %s\n %*s\n", - file, linenum, check_arg, (int)(errptr - thisline + 1), line, (int)(newpos + 1), "^"); + ha_alert("parsing [%s:%d]: argument number %d at position %d is empty and marks the end of the " + "argument list:\n %s\n %*s\n" + "Aborting to prevent all subsequent arguments from being silently ignored. " + "If this is caused by an environment variable expansion, please have a look at section " + "2.3 of the configuration manual to find solutions to address this.\n", + file, linenum, check_arg, (int)(errptr - thisline + 1), line, (int)(newpos + 1), "^"); + err_code |= ERR_ALERT | ERR_FATAL; + fatal++; break; } }