]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: vars: segfault during the configuration parsing
authorThierry FOURNIER <tfournier@arpalert.org>
Mon, 17 Aug 2015 16:38:24 +0000 (18:38 +0200)
committerWilly Tarreau <w@1wt.eu>
Mon, 17 Aug 2015 16:48:18 +0000 (18:48 +0200)
This bug is introduced by the patch 48a9cd104d07919fdd941b36e9f927a20d55edd3
"MINOR: vars: reduce the code size of some wrappers". A dereferencement was
removed.

src/vars.c

index 8cd09a61a0095364ec8f08bbf5d1bd645fe87b4e..adacd2f949e57ce8f2af7cc077ed2a15b4318e93 100644 (file)
@@ -607,9 +607,9 @@ static int parse_tcp_req_store(const char **args, int *arg, struct proxy *px,
                                struct tcp_rule *rule, char **err)
 {
        if (!parse_vars(args, arg, px, SMP_VAL_FE_REQ_CNT, err,
-                   (struct sample_expr **)rule->act_prm.data[0],
-                   (char **)rule->act_prm.data[1],
-                   (enum vars_scope *)rule->act_prm.data[2]))
+                   (struct sample_expr **)&rule->act_prm.data[0],
+                   (char **)&rule->act_prm.data[1],
+                   (enum vars_scope *)&rule->act_prm.data[2]))
                return 0;
        rule->action       = TCP_ACT_CUSTOM_CONT;
        rule->action_ptr   = action_tcp_req_store;
@@ -621,9 +621,9 @@ static int parse_tcp_res_store(const char **args, int *arg, struct proxy *px,
                          struct tcp_rule *rule, char **err)
 {
        if (!parse_vars(args, arg, px, SMP_VAL_BE_RES_CNT, err,
-                   (struct sample_expr **)rule->act_prm.data[0],
-                   (char **)rule->act_prm.data[1],
-                   (enum vars_scope *)rule->act_prm.data[2]))
+                   (struct sample_expr **)&rule->act_prm.data[0],
+                   (char **)&rule->act_prm.data[1],
+                   (enum vars_scope *)&rule->act_prm.data[2]))
                return 0;
        rule->action       = TCP_ACT_CUSTOM_CONT;
        rule->action_ptr   = action_tcp_res_store;
@@ -635,9 +635,9 @@ static int parse_http_req_store(const char **args, int *arg, struct proxy *px,
                          struct http_req_rule *rule, char **err)
 {
        if (!parse_vars(args, arg, px, SMP_VAL_FE_HRQ_HDR, err,
-                   (struct sample_expr **)rule->arg.act.p[0],
-                   (char **)rule->arg.act.p[1],
-                   (enum vars_scope *)rule->arg.act.p[2]))
+                   (struct sample_expr **)&rule->arg.act.p[0],
+                   (char **)&rule->arg.act.p[1],
+                   (enum vars_scope *)&rule->arg.act.p[2]))
                return -1;
        rule->action       = HTTP_REQ_ACT_CUSTOM_CONT;
        rule->action_ptr   = action_http_req_store;
@@ -649,9 +649,9 @@ static int parse_http_res_store(const char **args, int *arg, struct proxy *px,
                          struct http_res_rule *rule, char **err)
 {
        if (!parse_vars(args, arg, px, SMP_VAL_BE_HRS_HDR, err,
-                   (struct sample_expr **)rule->arg.act.p[0],
-                   (char **)rule->arg.act.p[1],
-                   (enum vars_scope *)rule->arg.act.p[2]))
+                   (struct sample_expr **)&rule->arg.act.p[0],
+                   (char **)&rule->arg.act.p[1],
+                   (enum vars_scope *)&rule->arg.act.p[2]))
                return -1;
        rule->action       = HTTP_RES_ACT_CUSTOM_CONT;
        rule->action_ptr   = action_http_res_store;