Hi HAProxy team!
While examining the code, I found a bug. Hope I've formulated the fix
properly:)
-- >8 --
Fix the left shift of args when "default" prefix matches. The cause of the
bug was the absence of zeroing of the right element during the shift. The
same bug for "no" prefix was fixed by commit 0f99e3497, but missed for
"default".
The shift of ("default", "option", "dontlog-normal")
produced ("option", "dontlog-normal", "dontlog-normal")
instead of ("option", "dontlog-normal", "")
As an example, a valid config line:
default option dontlog-normal
caused a parse error:
[ALERT] (32914) : config : parsing [bug-default-prefix.cfg:22] : 'option
dontlog-normal' cannot handle unexpected argument 'dontlog-normal'.
The patch should be backported to all stable versions, since the absence of
zeroing was introduced with "default" keyword.
---
src/cfgparse.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/src/cfgparse.c b/src/cfgparse.c
index 64d5ef543..d0b79462a 100644
--- a/src/cfgparse.c
+++ b/src/cfgparse.c
@@ -2678,9 +2678,14 @@ int parse_cfg(const struct cfgfile *cfg)
args[arg] = tmp;
}
else if (strcmp(args[0], "default") == 0) {
+ char *tmp;
+
kwm = KWM_DEF;
+ tmp = args[0];
for (arg=0; *args[arg+1]; arg++)
args[arg] = args[arg+1]; //
shift args after inversion
+ *tmp = '\0';
+ args[arg] = tmp;
}
if (kwm != KWM_STD && strcmp(args[0], "option") != 0 &&
--
Egor Shestakov
egor ascii(0x40) ved1 ascii(0x2E) me