From: Alan T. DeKok Date: Tue, 22 Aug 2023 14:39:10 +0000 (-0400) Subject: cleanups as per unit tests X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f863c81c12de221e21a866f44333d65028da515e;p=thirdparty%2Ffreeradius-server.git cleanups as per unit tests --- diff --git a/src/lib/util/pair.c b/src/lib/util/pair.c index 8c1612d79bb..6467f58dc22 100644 --- a/src/lib/util/pair.c +++ b/src/lib/util/pair.c @@ -3325,21 +3325,8 @@ bool fr_pair_matches_da(void const *item, void const *uctx) */ static void pair_list_flatten(TALLOC_CTX *ctx, fr_pair_list_t *to, fr_pair_list_t *from) { - bool skip = true; fr_pair_t *vp, *next; - /* - * If the list is already flat, don't do anything. - */ - for (vp = fr_pair_list_head(from); vp; vp = fr_pair_list_next(from, vp)) { - if (fr_type_is_structural(vp->vp_type)) { - skip = false; - break; - } - } - - if (skip) return; - /* * Sort the source list before flattening it. This is * really necessary only for struct and tlv types. But @@ -3407,10 +3394,28 @@ void fr_pair_flatten(fr_pair_t *vp) { fr_pair_list_t list; - fr_pair_list_init(&list); - fr_assert(fr_type_is_structural(vp->vp_type)); + /* + * Don't flatten children of a group if they're already flat. + */ + if (vp->vp_type == FR_TYPE_GROUP) { + bool skip = true; + + /* + * If the list is already flat, don't do anything. + */ + fr_pair_list_foreach(&vp->vp_group, child) { + if (fr_type_is_structural(child->vp_type)) { + skip = false; + break; + } + } + if (skip) return; + } + + fr_pair_list_init(&list); + /* * Flatten to an intermediate list, so that we don't loop * over things we already flattened.