BUG/MINOR: cfgparse: fix "default" prefix parsing

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.
This commit is contained in:
Egor Shestakov 2026-01-15 15:41:37 +00:00 committed by Willy Tarreau
parent 362ff2628f
commit 447d73dc99

View File

@ -2684,9 +2684,14 @@ next_line:
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 &&