node = ebst_lookup(&expr->pattern_tree, smp->data.u.str.area);
if (prev)
smp->data.u.str.area[smp->data.u.str.data] = prev;
- if (node) {
+
+ while (node) {
+ elt = ebmb_entry(node, struct pattern_tree, node);
+ if (elt->ref->gen_id != expr->ref->curr_gen) {
+ node = ebmb_next(node);
+ continue;
+ }
if (fill) {
- elt = ebmb_entry(node, struct pattern_tree, node);
static_pattern.data = elt->data;
static_pattern.ref = elt->ref;
static_pattern.sflags = PAT_SF_TREE;
list_for_each_entry(lst, &expr->patterns, list) {
pattern = &lst->pat;
+ if (pattern->ref->gen_id != expr->ref->curr_gen)
+ continue;
+
if (pattern->len != smp->data.u.str.data)
continue;
list_for_each_entry(lst, &expr->patterns, list) {
pattern = &lst->pat;
+ if (pattern->ref->gen_id != expr->ref->curr_gen)
+ continue;
+
if (pattern->len != smp->data.u.str.data)
continue;
list_for_each_entry(lst, &expr->patterns, list) {
pattern = &lst->pat;
+ if (pattern->ref->gen_id != expr->ref->curr_gen)
+ continue;
+
if (regex_exec_match2(pattern->ptr.reg, smp->data.u.str.area, smp->data.u.str.data,
MAX_MATCH, pmatch, 0)) {
ret = pattern;
list_for_each_entry(lst, &expr->patterns, list) {
pattern = &lst->pat;
+ if (pattern->ref->gen_id != expr->ref->curr_gen)
+ continue;
+
if (regex_exec2(pattern->ptr.reg, smp->data.u.str.area, smp->data.u.str.data)) {
ret = pattern;
break;
if (prev)
smp->data.u.str.area[smp->data.u.str.data] = prev;
- if (node) {
+ while (node) {
+ elt = ebmb_entry(node, struct pattern_tree, node);
+ if (elt->ref->gen_id != expr->ref->curr_gen) {
+ node = ebmb_next(node);
+ continue;
+ }
if (fill) {
- elt = ebmb_entry(node, struct pattern_tree, node);
static_pattern.data = elt->data;
static_pattern.ref = elt->ref;
static_pattern.sflags = PAT_SF_TREE;
list_for_each_entry(lst, &expr->patterns, list) {
pattern = &lst->pat;
+ if (pattern->ref->gen_id != expr->ref->curr_gen)
+ continue;
+
if (pattern->len > smp->data.u.str.data)
continue;
list_for_each_entry(lst, &expr->patterns, list) {
pattern = &lst->pat;
+ if (pattern->ref->gen_id != expr->ref->curr_gen)
+ continue;
+
if (pattern->len > smp->data.u.str.data)
continue;
list_for_each_entry(lst, &expr->patterns, list) {
pattern = &lst->pat;
+ if (pattern->ref->gen_id != expr->ref->curr_gen)
+ continue;
+
if (pattern->len > smp->data.u.str.data)
continue;
list_for_each_entry(lst, &expr->patterns, list) {
pattern = &lst->pat;
+
+ if (pattern->ref->gen_id != expr->ref->curr_gen)
+ continue;
+
if (match_word(smp, pattern, expr->mflags, make_4delim('/', '?', '?', '?')))
return pattern;
}
list_for_each_entry(lst, &expr->patterns, list) {
pattern = &lst->pat;
+
+ if (pattern->ref->gen_id != expr->ref->curr_gen)
+ continue;
+
if (match_word(smp, pattern, expr->mflags, make_4delim('/', '?', '.', ':')))
return pattern;
}
list_for_each_entry(lst, &expr->patterns, list) {
pattern = &lst->pat;
+
+ if (pattern->ref->gen_id != expr->ref->curr_gen)
+ continue;
+
if ((!pattern->val.range.min_set || pattern->val.range.min <= smp->data.u.sint) &&
(!pattern->val.range.max_set || smp->data.u.sint <= pattern->val.range.max))
return pattern;
list_for_each_entry(lst, &expr->patterns, list) {
pattern = &lst->pat;
+
+ if (pattern->ref->gen_id != expr->ref->curr_gen)
+ continue;
+
if ((!pattern->val.range.min_set || pattern->val.range.min <= smp->data.u.str.data) &&
(!pattern->val.range.max_set || smp->data.u.str.data <= pattern->val.range.max))
return pattern;
*/
s = &smp->data.u.ipv4;
node = ebmb_lookup_longest(&expr->pattern_tree, &s->s_addr);
- if (node) {
+ while (node) {
+ elt = ebmb_entry(node, struct pattern_tree, node);
+ if (elt->ref->gen_id != expr->ref->curr_gen) {
+ node = ebmb_next(node);
+ continue;
+ }
if (fill) {
- elt = ebmb_entry(node, struct pattern_tree, node);
static_pattern.data = elt->data;
static_pattern.ref = elt->ref;
static_pattern.sflags = PAT_SF_TREE;
write_u16(&tmp6.s6_addr[10], htons(0xffff));
write_u32(&tmp6.s6_addr[12], smp->data.u.ipv4.s_addr);
node = ebmb_lookup_longest(&expr->pattern_tree_2, &tmp6);
- if (node) {
+ while (node) {
+ elt = ebmb_entry(node, struct pattern_tree, node);
+ if (elt->ref->gen_id != expr->ref->curr_gen) {
+ node = ebmb_next(node);
+ continue;
+ }
if (fill) {
- elt = ebmb_entry(node, struct pattern_tree, node);
static_pattern.data = elt->data;
static_pattern.ref = elt->ref;
static_pattern.sflags = PAT_SF_TREE;
* the longest match method.
*/
node = ebmb_lookup_longest(&expr->pattern_tree_2, &smp->data.u.ipv6);
- if (node) {
+ while (node) {
+ elt = ebmb_entry(node, struct pattern_tree, node);
+ if (elt->ref->gen_id != expr->ref->curr_gen) {
+ node = ebmb_next(node);
+ continue;
+ }
if (fill) {
- elt = ebmb_entry(node, struct pattern_tree, node);
static_pattern.data = elt->data;
static_pattern.ref = elt->ref;
static_pattern.sflags = PAT_SF_TREE;
* match method.
*/
node = ebmb_lookup_longest(&expr->pattern_tree, &v4);
- if (node) {
+ while (node) {
+ elt = ebmb_entry(node, struct pattern_tree, node);
+ if (elt->ref->gen_id != expr->ref->curr_gen) {
+ node = ebmb_next(node);
+ continue;
+ }
if (fill) {
- elt = ebmb_entry(node, struct pattern_tree, node);
static_pattern.data = elt->data;
static_pattern.ref = elt->ref;
static_pattern.sflags = PAT_SF_TREE;
list_for_each_entry(lst, &expr->patterns, list) {
pattern = &lst->pat;
+ if (pattern->ref->gen_id != expr->ref->curr_gen)
+ continue;
+
/* The input sample is IPv4, use it as is. */
if (smp->data.type == SMP_T_IPV4) {
v4 = smp->data.u.ipv4.s_addr;