]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-settings: Fix accessing override setting whose filter was just updated
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 14 Nov 2023 10:47:19 +0000 (12:47 +0200)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 12 Feb 2025 10:34:10 +0000 (12:34 +0200)
set->key was stored before settings_override_filter_match() updated it,
causing the setting lookup to fail later on.

src/lib-settings/settings.c

index b7ed85a97b8e5bb53e6d9c26f401878d0dbd76b6..ac1fbd0c1885e10bbe7cbf37d56b45aa09cd47b4 100644 (file)
@@ -1315,7 +1315,6 @@ settings_instance_override(struct settings_apply_ctx *ctx,
                        continue; /* already applied */
                set = *set_elem;
 
-               const char *key = set->key, *value;
                unsigned int key_idx;
                int ret;
 
@@ -1341,6 +1340,9 @@ settings_instance_override(struct settings_apply_ctx *ctx,
                    null_strcmp(ctx->filter_value, set->last_filter_value) == 0)
                        seen_filter = TRUE;
 
+               /* Set key only after settings_override_filter_match() has
+                  potentially changed it. */
+               const char *key = set->key, *value;
                ret = settings_override_get_value(ctx, set, &key,
                                                  &key_idx, &value, error_r);
                if (ret < 0)