From: Alan T. DeKok Date: Tue, 22 Aug 2023 13:01:55 +0000 (-0400) Subject: don't sort if the list is already flat. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ca53cda31ae083406593bb9620b4a5d2ff913dbc;p=thirdparty%2Ffreeradius-server.git don't sort if the list is already flat. That breaks things due to key fields + child structs --- diff --git a/src/lib/util/pair.c b/src/lib/util/pair.c index a29b9aa226a..8c1612d79bb 100644 --- a/src/lib/util/pair.c +++ b/src/lib/util/pair.c @@ -3325,8 +3325,21 @@ 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