]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: spoe: Unset variable instead of set it if no data provided
authorChristopher Faulet <cfaulet@haproxy.com>
Thu, 15 Oct 2020 14:08:30 +0000 (16:08 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Fri, 16 Oct 2020 17:53:17 +0000 (19:53 +0200)
If an agent try to set a variable with the NULL data type, an unset is perform
instead to avoid undefined behaviors. Once decoded, such data are translated to
a sample with the type SMP_T_ANY. It is unexpected in HAProxy. When a variable
is set with such sample, no data are attached to the variable. Thus, when the
variable is retrieved later in the transaction, the sample data are
uninitialized, leading to undefined behaviors depending on how it is used. For
instance, it leads to a crash if the debug converter is used on such variable.

This patch should fix the issue #855. It must be backported as far as 1.8.

src/flt_spoe.c

index 62e535ef118834a545e0795841b8b1b29b26abcf..cf5fc7a4c0b4aad913265bdf7fe0c988fd7573fe 100644 (file)
@@ -2368,7 +2368,10 @@ spoe_decode_action_set_var(struct stream *s, struct spoe_context *ctx,
                    ((struct spoe_config *)FLT_CONF(ctx->filter))->agent->var_pfx,
                    (int)sz, str);
 
-       spoe_set_var(ctx, scope, str, sz, &smp);
+       if (smp.data.type == SMP_T_ANY)
+               spoe_unset_var(ctx, scope, str, sz, &smp);
+       else
+               spoe_set_var(ctx, scope, str, sz, &smp);
 
        ret  = (p - *buf);
        *buf = p;