From: Christopher Faulet Date: Mon, 13 May 2019 08:39:36 +0000 (+0200) Subject: MINOR: spoe: Set the argument chunk size to 0 when SPOE variables are checked X-Git-Tag: v2.0-dev3~41 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bf9bcb0a00d7f0f2d743bc12e146dddbbb9167b7;p=thirdparty%2Fhaproxy.git MINOR: spoe: Set the argument chunk size to 0 when SPOE variables are checked When SPOE variables are registered during HAProxy startup, the argument used to call the function vars_check_arg() uses the trash area. To be sure it is never released by the callee function, the size of the internal chunk (arg.data.str) is set to 0. It is important to do so because, to fix a memory leak, this buffer must be released by the function vars_check_arg(). This patch must be backported to 1.9. --- diff --git a/src/flt_spoe.c b/src/flt_spoe.c index 82e2719941..2755f3ab42 100644 --- a/src/flt_spoe.c +++ b/src/flt_spoe.c @@ -4173,6 +4173,7 @@ parse_spoe_flt(char **args, int *cur_arg, struct proxy *px, arg.type = ARGT_STR; arg.data.str.area = trash.area; arg.data.str.data = trash.data; + arg.data.str.size = 0; /* Set it to 0 to not release it in vars_check_args() */ if (!vars_check_arg(&arg, err)) { memprintf(err, "SPOE agent '%s': failed to register variable %s.%s (%s)", curagent->id, curagent->var_pfx, curagent->var_on_error, *err); @@ -4189,6 +4190,7 @@ parse_spoe_flt(char **args, int *cur_arg, struct proxy *px, arg.type = ARGT_STR; arg.data.str.area = trash.area; arg.data.str.data = trash.data; + arg.data.str.size = 0; /* Set it to 0 to not release it in vars_check_args() */ if (!vars_check_arg(&arg, err)) { memprintf(err, "SPOE agent '%s': failed to register variable %s.%s (%s)", curagent->id, curagent->var_pfx, curagent->var_t_process, *err); @@ -4205,6 +4207,7 @@ parse_spoe_flt(char **args, int *cur_arg, struct proxy *px, arg.type = ARGT_STR; arg.data.str.area = trash.area; arg.data.str.data = trash.data; + arg.data.str.size = 0; /* Set it to 0 to not release it in vars_check_args() */ if (!vars_check_arg(&arg, err)) { memprintf(err, "SPOE agent '%s': failed to register variable %s.%s (%s)", curagent->id, curagent->var_pfx, curagent->var_t_process, *err); @@ -4410,6 +4413,7 @@ parse_spoe_flt(char **args, int *cur_arg, struct proxy *px, arg.type = ARGT_STR; arg.data.str.area = trash.area; arg.data.str.data = trash.data; + arg.data.str.size = 0; /* Set it to 0 to not release it in vars_check_args() */ if (!vars_check_arg(&arg, err)) { memprintf(err, "SPOE agent '%s': failed to register variable %s.%s (%s)", curagent->id, curagent->var_pfx, vph->name, *err);