]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
add short-circuit checks to fr_pair_afrom_da_depth_nested
authorAlan T. DeKok <aland@freeradius.org>
Tue, 28 Oct 2025 12:31:26 +0000 (08:31 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Tue, 28 Oct 2025 13:07:53 +0000 (09:07 -0400)
src/lib/util/pair.c
src/lib/util/pair.h

index 09f8078b85a67c53a8b09f607546c366df98b183..5f1384b32a8f979a952daa27ce4254156f61ef8e 100644 (file)
@@ -409,7 +409,7 @@ fr_pair_t *fr_pair_afrom_child_num(TALLOC_CTX *ctx, fr_dict_attr_t const *parent
  *     - A new #fr_pair_t.
  *     - NULL on error.
  */
-fr_pair_t *fr_pair_afrom_da_depth_nested(TALLOC_CTX *ctx, fr_pair_list_t *list, fr_dict_attr_t const *da, int start)
+fr_pair_t *fr_pair_afrom_da_depth_nested(TALLOC_CTX *ctx, fr_pair_list_t *list, fr_dict_attr_t const *da, unsigned int start)
 {
        fr_pair_t               *vp;
        unsigned int            i;
@@ -418,6 +418,14 @@ fr_pair_t *fr_pair_afrom_da_depth_nested(TALLOC_CTX *ctx, fr_pair_list_t *list,
        fr_pair_list_t          *cur_list;      /* Current list being searched */
        fr_da_stack_t           da_stack;
 
+       /*
+        *      Short-circuit the common case.
+        */
+       if (da->depth == (start + 1)) {
+               if (fr_pair_append_by_da(ctx, &vp, list, da) < 0) return NULL;
+               return vp;
+       }
+
        fr_proto_da_stack_build(&da_stack, da);
        cur_list = list;
        cur_ctx = ctx;
index 600a70cf60e6cf0260bbdae2ddc72e58fc334309..f9874804844266ccf9beb844f2b5c3f8c15171d8 100644 (file)
@@ -457,7 +457,7 @@ fr_pair_t   *fr_pair_afrom_child_num(TALLOC_CTX *ctx, fr_dict_attr_t const *parent
 
 fr_pair_t      *fr_pair_afrom_da_nested(TALLOC_CTX *ctx, fr_pair_list_t *list, fr_dict_attr_t const *da) CC_HINT(warn_unused_result) CC_HINT(nonnull(2,3));
 
-fr_pair_t      *fr_pair_afrom_da_depth_nested(TALLOC_CTX *ctx, fr_pair_list_t *list, fr_dict_attr_t const *da, int start) CC_HINT(warn_unused_result) CC_HINT(nonnull(2,3));
+fr_pair_t      *fr_pair_afrom_da_depth_nested(TALLOC_CTX *ctx, fr_pair_list_t *list, fr_dict_attr_t const *da, unsigned int start) CC_HINT(warn_unused_result) CC_HINT(nonnull(2,3));
 
 fr_pair_t      *fr_pair_copy(TALLOC_CTX *ctx, fr_pair_t const *vp) CC_HINT(nonnull(2)) CC_HINT(warn_unused_result);