BUG/MINOR: vars: fix set-var/unset-var exclusivity in the keyword parser
authorWilly Tarreau <w@1wt.eu>
Thu, 2 Sep 2021 16:46:22 +0000 (18:46 +0200)
committerWilly Tarreau <w@1wt.eu>
Fri, 3 Sep 2021 14:29:26 +0000 (16:29 +0200)
The parser checks first for "set-var" then "unset-var" from the updated
offset instead of testing it only when the other one fails, so it
validates this rule as "unset-var":

    http-request set-varunset-var(proc.a)

This should be backported everywhere relevant, though it's mostly harmless
as it's unlikely that some users are purposely writing this in their conf!

(cherry picked from commit 2819210a8328ff60505e499acf9f8bc323bec840)
Signed-off-by: Willy Tarreau <w@1wt.eu>
(cherry picked from commit f6bda6191520885fc3af06c3dec8a74e56d46cbd)
Signed-off-by: Willy Tarreau <w@1wt.eu>

src/vars.c

index a74642e..fdee7a7 100644 (file)
@@ -750,11 +750,11 @@ static enum act_parse_ret parse_store(const char **args, int *arg, struct proxy
        const char *kw_name;
        int flags, set_var = 0;
 
-       if (!strncmp(var_name, "set-var", 7)) {
+       if (strncmp(var_name, "set-var", 7) == 0) {
                var_name += 7;
                set_var   = 1;
        }
-       if (!strncmp(var_name, "unset-var", 9)) {
+       else if (strncmp(var_name, "unset-var", 9) == 0) {
                var_name += 9;
                set_var   = 0;
        }