diff --git a/include/proto/pattern.h b/include/proto/pattern.h index 9c93db93d..5b9929614 100644 --- a/include/proto/pattern.h +++ b/include/proto/pattern.h @@ -209,7 +209,7 @@ int pattern_read_from_file(struct pattern_head *head, unsigned int refflags, con void pattern_init_expr(struct pattern_expr *expr); struct pattern_expr *pattern_lookup_expr(struct pattern_head *head, struct pat_ref *ref); struct pattern_expr *pattern_new_expr(struct pattern_head *head, struct pat_ref *ref, - char **err, int *reuse); + int patflags, char **err, int *reuse); struct sample_data **pattern_find_smp(struct pattern_expr *expr, struct pat_ref_elt *elt); int pattern_delete(struct pattern_expr *expr, struct pat_ref_elt *ref); diff --git a/src/acl.c b/src/acl.c index 9b67a611b..8417c1b5d 100644 --- a/src/acl.c +++ b/src/acl.c @@ -536,13 +536,10 @@ struct acl_expr *parse_acl_expr(const char **args, char **err, struct arg_list * } /* Create new pattern expression associated to this reference. */ - pattern_expr = pattern_new_expr(&expr->pat, ref, err, NULL); + pattern_expr = pattern_new_expr(&expr->pat, ref, patflags, err, NULL); if (!pattern_expr) goto out_free_expr; - /* Copy the pattern matching and indexing flags. */ - pattern_expr->mflags = patflags; - /* now parse all patterns */ while (**args) { arg = *args; diff --git a/src/pattern.c b/src/pattern.c index 20593093e..a8b56ca5e 100644 --- a/src/pattern.c +++ b/src/pattern.c @@ -2065,7 +2065,7 @@ struct pattern_expr *pattern_lookup_expr(struct pattern_head *head, struct pat_r * flag is set. */ struct pattern_expr *pattern_new_expr(struct pattern_head *head, struct pat_ref *ref, - char **err, int *reuse) + int patflags, char **err, int *reuse) { struct pattern_expr *expr; struct pattern_expr_list *list; @@ -2088,7 +2088,8 @@ struct pattern_expr *pattern_new_expr(struct pattern_head *head, struct pat_ref list_for_each_entry(expr, &ref->pat, list) if (expr->pat_head->index == head->index && expr->pat_head->parse == head->parse && - expr->pat_head->parse_smp == head->parse_smp) + expr->pat_head->parse_smp == head->parse_smp && + expr->mflags == patflags) break; if (&expr->list == &ref->pat) expr = NULL; @@ -2109,6 +2110,9 @@ struct pattern_expr *pattern_new_expr(struct pattern_head *head, struct pat_ref /* Initialize this new expr. */ pattern_init_expr(expr); + /* Copy the pattern matching and indexing flags. */ + expr->mflags = patflags; + /* This new pattern expression reference one of his heads. */ expr->pat_head = head; @@ -2377,10 +2381,9 @@ int pattern_read_from_file(struct pattern_head *head, unsigned int refflags, */ expr = pattern_lookup_expr(head, ref); if (!expr || (expr->mflags != patflags)) { - expr = pattern_new_expr(head, ref, err, &reuse); + expr = pattern_new_expr(head, ref, patflags, err, &reuse); if (!expr) return 0; - expr->mflags = patflags; } /* The returned expression may be not empty, because the function