From: Timo Sirainen Date: Sun, 5 Oct 2025 10:18:50 +0000 (+0300) Subject: config: Fix including default @group when a similar non-default filter exists X-Git-Tag: 2.4.2~116 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1d4941dd3a40ba721927f5c16383d8bd13f28f14;p=thirdparty%2Fdovecot%2Fcore.git config: Fix including default @group when a similar non-default filter exists Fixes: Panic: file hash.c: line 252 (hash_table_insert_node): assertion failed: (opcode == HASH_TABLE_OP_UPDATE) --- diff --git a/src/config/config-parser.c b/src/config/config-parser.c index a45415b1e6..19a684ff09 100644 --- a/src/config/config-parser.c +++ b/src/config/config-parser.c @@ -3064,12 +3064,20 @@ config_parser_include_merge(struct config_parser_context *ctx, struct config_filter_parser *dest, *new_src_filter = config_filter_parser_replace_parent(ctx->pool, src_filter, ctx->cur_section->filter_parser); + /* If parent filter now has a reverse default_settings, + use the parent with the matching default_settings. */ + struct config_filter_parser *parent_parser = + ctx->cur_section->filter_parser; + if (parent_parser->filter.default_settings != new_src_filter->filter.default_settings) { + config_parse_fill_reverse_default_siblings(ctx); + parent_parser = parent_parser->reverse_default_sibling; + } - dest = config_filters_find_child(ctx->cur_section->filter_parser, + dest = config_filters_find_child(parent_parser, &new_src_filter->filter); if (dest == NULL) { dest = config_add_new_parser(ctx, &new_src_filter->filter, - ctx->cur_section->filter_parser); + parent_parser); dest->filter_required_setting_seen = new_src_filter->filter_required_setting_seen; }