BUG/MEDIUM: acl: make prue_acl_expr() correctly free ACL expressions upon exit

When leaving, during the deinit() process, prune_acl_expr() is called to
delete all ACL expressions. A bug was introduced with commit 34db1084 that
caused every other expression argument to be skipped, and more annoyingly,
it introduced the risk of scanning past the arg list and crashing or
freezing the old process during a reload.

Credits for finding this issue go to Dmitry Sivachenko who first reported
it, and second did a lot of research to narrow it down to a minimal
configuration.
This commit is contained in:
Willy Tarreau 2012-11-23 23:53:18 +01:00
parent 7d1df41171
commit 4a6e5c6d69

View File

@ -1269,7 +1269,6 @@ static struct acl_expr *prune_acl_expr(struct acl_expr *expr)
arg->data.str.str = NULL;
arg->unresolved = 0;
}
arg++;
}
if (expr->args != empty_arg_list)