From: Timo Sirainen Date: Fri, 31 Aug 2018 10:04:53 +0000 (+0300) Subject: lib: Fix matching parent categories in event filter X-Git-Tag: 2.3.9~1479 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=aca63e532bb99bd9d1df462d82a26ff3f2c9aca7;p=thirdparty%2Fdovecot%2Fcore.git lib: Fix matching parent categories in event filter So far this hasn't caused problems, because parent events had been using parent categories. However, if the parent category wasn't used by an event or its parents, an event filter wouldn't have matched it. --- diff --git a/src/lib/event-filter.c b/src/lib/event-filter.c index 37aa3465b8..b98692a60f 100644 --- a/src/lib/event-filter.c +++ b/src/lib/event-filter.c @@ -400,6 +400,17 @@ bool event_filter_import_unescaped(struct event_filter *filter, return TRUE; } +static bool +event_category_match(const struct event_category *category, + const struct event_category *wanted_category) +{ + for (; category != NULL; category = category->parent) { + if (category == wanted_category) + return TRUE; + } + return FALSE; +} + static bool event_has_category(struct event *event, struct event_category *wanted_category) { @@ -410,7 +421,7 @@ event_has_category(struct event *event, struct event_category *wanted_category) while (event != NULL) { if (array_is_created(&event->categories)) { array_foreach(&event->categories, catp) { - if (*catp == wanted_category) + if (event_category_match(*catp, wanted_category)) return TRUE; } }