]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
CLEANUP: vars: always zero the pointers after a free()
authorWilly Tarreau <w@1wt.eu>
Fri, 26 Feb 2021 20:19:53 +0000 (21:19 +0100)
committerWilly Tarreau <w@1wt.eu>
Fri, 26 Feb 2021 20:21:21 +0000 (21:21 +0100)
In sample_store(), depending on the new sample types, the area pointer
was not always zeroed after being freed. Let's make sure it's always the
case to avoid the risk of dangling pointers being misused.

src/vars.c

index 3da44300293a4c1af8a00299bd1b94b07a7fac8d..c101c7288fc8e88e9f94ceabc98ef00fbe941705 100644 (file)
@@ -141,11 +141,11 @@ unsigned int var_clear(struct var *var)
        unsigned int size = 0;
 
        if (var->data.type == SMP_T_STR || var->data.type == SMP_T_BIN) {
-               free(var->data.u.str.area);
+               ha_free(&var->data.u.str.area);
                size += var->data.u.str.data;
        }
        else if (var->data.type == SMP_T_METH && var->data.u.meth.meth == HTTP_METH_OTHER) {
-               free(var->data.u.meth.str.area);
+               ha_free(&var->data.u.meth.str.area);
                size += var->data.u.meth.str.data;
        }
        LIST_DEL(&var->l);
@@ -352,12 +352,12 @@ static int sample_store(struct vars *vars, const char *name, struct sample *smp)
                /* free its used memory. */
                if (var->data.type == SMP_T_STR ||
                    var->data.type == SMP_T_BIN) {
-                       free(var->data.u.str.area);
+                       ha_free(&var->data.u.str.area);
                        var_accounting_diff(vars, smp->sess, smp->strm,
                                            -var->data.u.str.data);
                }
                else if (var->data.type == SMP_T_METH && var->data.u.meth.meth == HTTP_METH_OTHER) {
-                       free(var->data.u.meth.str.area);
+                       ha_free(&var->data.u.meth.str.area);
                        var_accounting_diff(vars, smp->sess, smp->strm,
                                            -var->data.u.meth.str.data);
                }