]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
update test harness function to catch error case
authorAlan T. DeKok <aland@freeradius.org>
Fri, 13 Feb 2026 17:57:06 +0000 (12:57 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Fri, 13 Feb 2026 17:57:06 +0000 (12:57 -0500)
src/protocols/dns/encode.c

index ab3c8acc188827a9a1c23a4d5da79d07a54970e6..ee95be074f31cf774e874e0c1dd151741b6a0fd1 100644 (file)
@@ -367,6 +367,8 @@ static ssize_t encode_tlv(fr_dbuff_t *dbuff,
 
 
 /** Encode a Dns option and any sub-options.
+ *
+ *  This function is only used by the test harness.
  *
  * @param[out] dbuff           Where to write encoded DHCP attributes.
  * @param[in] cursor           with current VP set to the option to be encoded.
@@ -380,6 +382,7 @@ static ssize_t fr_dns_encode_rr(fr_dbuff_t *dbuff, fr_dcursor_t *cursor, void *e
 {
        ssize_t                 slen;
        fr_pair_t               *vp;
+       fr_dcursor_t            child_cursor;
        fr_da_stack_t           da_stack;
        fr_dbuff_t              work_dbuff = FR_DBUFF_MAX(dbuff, UINT16_MAX);
 
@@ -389,19 +392,15 @@ static ssize_t fr_dns_encode_rr(fr_dbuff_t *dbuff, fr_dcursor_t *cursor, void *e
        FR_PROTO_TRACE("encode_rr -- remaining %zd", fr_dbuff_remaining(&work_dbuff));
 
        vp = fr_dcursor_current(cursor);
-       if (vp->vp_type == FR_TYPE_STRUCT) {
-               fr_dcursor_t child_cursor;
+       if (!vp) return 0;
 
-               fr_pair_dcursor_child_iter_init(&child_cursor, &vp->vp_group, cursor);
+       fr_assert(vp->vp_type == FR_TYPE_STRUCT);
 
-               slen = fr_struct_to_network(&work_dbuff, &da_stack, 0, &child_cursor, encode_ctx, encode_value, encode_child);
-               if (slen <= 0) return slen;
-               (void) fr_dcursor_next(cursor);
+       fr_pair_dcursor_child_iter_init(&child_cursor, &vp->vp_group, cursor);
 
-       } else {
-               slen = fr_struct_to_network(&work_dbuff, &da_stack, 0, cursor, encode_ctx, encode_value, encode_child);
-               if (slen <= 0) return slen;
-       }
+       slen = fr_struct_to_network(&work_dbuff, &da_stack, 0, &child_cursor, encode_ctx, encode_value, encode_child);
+       if (slen <= 0) return slen;
+       (void) fr_dcursor_next(cursor);
 
        FR_PROTO_TRACE("Complete rr is %zu byte(s)", fr_dbuff_used(&work_dbuff));
        FR_PROTO_HEX_DUMP(fr_dbuff_start(&work_dbuff), fr_dbuff_used(&work_dbuff), NULL);