]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: sample/acl: use is_idchar() to locate the fetch/conv name
authorWilly Tarreau <w@1wt.eu>
Fri, 14 Feb 2020 17:27:10 +0000 (18:27 +0100)
committerWilly Tarreau <w@1wt.eu>
Fri, 14 Feb 2020 18:02:06 +0000 (19:02 +0100)
Instead of scanning a string looking for an end of line, ')' or ',',
let's only accept characters which are actually valid identifier
characters. This will let the parser know that in %[src], only "src"
is the sample fetch name, not "src]". This was done both for samples
and ACLs since they are the same here.

src/acl.c
src/sample.c

index 209580a11dfed0d1043529bc4e640a0c4aabdc60..bef3d4ea10abc74dce4eeb5203c07cc865868a43 100644 (file)
--- a/src/acl.c
+++ b/src/acl.c
@@ -90,7 +90,7 @@ struct acl_keyword *find_acl_kw(const char *kw)
        struct acl_kw_list *kwl;
 
        kwend = kw;
-       while (*kwend && *kwend != '(' && *kwend != ',')
+       while (is_idchar(*kwend))
                kwend++;
 
        list_for_each_entry(kwl, &acl_keywords.list, list) {
@@ -190,7 +190,8 @@ struct acl_expr *parse_acl_expr(const char **args, char **err, struct arg_list *
                smp->arg_p = empty_arg_list;
 
                /* look for the beginning of the subject arguments */
-               for (arg = args[0]; *arg && *arg != '(' && *arg != ','; arg++);
+               for (arg = args[0]; is_idchar(*arg); arg++)
+                       ;
 
                endt = arg;
                if (*endt == '(') {
@@ -263,7 +264,8 @@ struct acl_expr *parse_acl_expr(const char **args, char **err, struct arg_list *
                                /* none ? end of converters */
                                break;
 
-                       for (endw = begw; *endw && *endw != '(' && *endw != ','; endw++);
+                       for (endw = begw; is_idchar(*endw); endw++)
+                               ;
 
                        free(ckw);
                        ckw = my_strndup(begw, endw - begw);
index 820fa479694f889a879820ae0f723f8ba7322fd3..d9439fb50bd5f157d29d655214ea7d8de9edbca6 100644 (file)
@@ -839,7 +839,8 @@ struct sample_expr *sample_parse_expr(char **str, int *idx, const char *file, in
        int err_arg;
 
        begw = str[*idx];
-       for (endw = begw; *endw && *endw != '(' && *endw != ','; endw++);
+       for (endw = begw; is_idchar(*endw); endw++)
+               ;
 
        if (endw == begw) {
                memprintf(err_msg, "missing fetch method");
@@ -949,7 +950,8 @@ struct sample_expr *sample_parse_expr(char **str, int *idx, const char *file, in
                                break;
                }
 
-               for (endw = begw; *endw && *endw != '(' && *endw != ','; endw++);
+               for (endw = begw; is_idchar(*endw); endw++)
+                       ;
 
                free(ckw);
                ckw = my_strndup(begw, endw - begw);