BUG/MEDIUM: acl: do not evaluate next terms after a miss

When a condition does something like :

   action if A B C || D E F

If B returns a miss (can't tell true or false), C must not
be evaluated. This is important when C has a side effect
(eg: sc*_inc_gpc0). However the second part after the ||
can still be evaluated.
This commit is contained in:
Willy Tarreau 2013-10-30 19:30:32 +01:00
parent 44778ad87d
commit 79c412b673

View File

@ -1779,8 +1779,8 @@ int acl_exec_cond(struct acl_cond *cond, struct proxy *px, struct session *l4, v
suite_res &= acl_res;
/* we're ANDing these terms, so a single FAIL is enough */
if (suite_res == ACL_PAT_FAIL)
/* we're ANDing these terms, so a single FAIL or MISS is enough */
if (suite_res != ACL_PAT_PASS)
break;
}
cond_res |= suite_res;