From: Vsevolod Stakhov Date: Tue, 6 May 2025 16:27:35 +0000 (+0100) Subject: [Fix] Really fix local objects filtering, sigh... X-Git-Tag: 3.12.0~26^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F5452%2Fhead;p=thirdparty%2Frspamd.git [Fix] Really fix local objects filtering, sigh... --- diff --git a/src/rspamadm/configdump.c b/src/rspamadm/configdump.c index eafa0f0363..d090b66f05 100644 --- a/src/rspamadm/configdump.c +++ b/src/rspamadm/configdump.c @@ -116,10 +116,11 @@ filter_non_default(const ucl_object_t *obj, bool override_only) int min_prio = override_only ? 1 : 0; if (ucl_object_get_priority(obj) > min_prio) { - result = ucl_object_typed_new(ucl_object_type(obj)); + switch (ucl_object_type(obj)) { case UCL_OBJECT: - case UCL_ARRAY: + result = ucl_object_typed_new(ucl_object_type(obj)); + while ((cur = ucl_object_iterate(obj, &it, true))) { ucl_object_t *filtered = filter_non_default(cur, override_conf_only); if (filtered) { @@ -127,10 +128,20 @@ filter_non_default(const ucl_object_t *obj, bool override_only) } } break; + case UCL_ARRAY: + result = ucl_object_typed_new(ucl_object_type(obj)); + + while ((cur = ucl_object_iterate(obj, &it, true))) { + ucl_object_t *filtered = filter_non_default(cur, override_conf_only); + if (filtered) { + ucl_array_append(result, filtered); + } + } default: - ucl_object_insert_key(result, ucl_object_ref(obj), ucl_object_key(obj), obj->keylen, true); + result = ucl_object_ref(obj); break; } + return result; } @@ -142,7 +153,17 @@ filter_non_default(const ucl_object_t *obj, bool override_only) ucl_object_t *filtered = filter_non_default(cur, override_only); if (filtered) { has_non_default = true; - ucl_object_insert_key(result, filtered, ucl_object_key(cur), cur->keylen, true); + + if (ucl_object_type(obj) == UCL_OBJECT) { + ucl_object_insert_key(result, filtered, + ucl_object_key(cur), cur->keylen, true); + } + else if (ucl_object_type(obj) == UCL_ARRAY) { + ucl_array_append(result, filtered); + } + else { + g_assert_not_reached(); + } } } @@ -155,6 +176,7 @@ filter_non_default(const ucl_object_t *obj, bool override_only) return result; } + return NULL; }