BUG/MINOR: pattern: pattern comparison executed twice
If the pattern is set as case insensitive, the string comparison
is executed twice. The first time is insensitive comparison, the
second is sensitive.
This is a recent bug, no backport is needed.
diff --git a/src/pattern.c b/src/pattern.c
index 8380c63..38b1383 100644
--- a/src/pattern.c
+++ b/src/pattern.c
@@ -1222,11 +1222,14 @@
continue;
if (pattern.len != pat->len)
continue;
- if ((pat->flags & PAT_F_IGNORE_CASE) &&
- strncasecmp(pattern.ptr.str, pat->ptr.str, pat->len) != 0)
- continue;
- if (strncmp(pattern.ptr.str, pat->ptr.str, pat->len) != 0)
- continue;
+ if (pat->flags & PAT_F_IGNORE_CASE) {
+ if (strncasecmp(pattern.ptr.str, pat->ptr.str, pat->len) != 0)
+ continue;
+ }
+ else {
+ if (strncmp(pattern.ptr.str, pat->ptr.str, pat->len) != 0)
+ continue;
+ }
goto found;
}
}
@@ -1245,11 +1248,14 @@
list_for_each_entry(pat, &expr->patterns, list) {
if (pat->flags & PAT_F_TREE)
continue;
- if ((pat->flags & PAT_F_IGNORE_CASE) &&
- strcasecmp(pattern.ptr.reg->regstr, pat->ptr.reg->regstr) != 0)
- continue;
- if (strcmp(pattern.ptr.reg->regstr, pat->ptr.reg->regstr) != 0)
- continue;
+ if (pat->flags & PAT_F_IGNORE_CASE) {
+ if (strcasecmp(pattern.ptr.reg->regstr, pat->ptr.reg->regstr) != 0)
+ continue;
+ }
+ else {
+ if (strcmp(pattern.ptr.reg->regstr, pat->ptr.reg->regstr) != 0)
+ continue;
+ }
goto found;
}
}