]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
Don't touch return variable pkt by reference...
authorWillem Toorop <willem@nlnetlabs.nl>
Wed, 12 Nov 2025 15:43:56 +0000 (16:43 +0100)
committerWillem Toorop <willem@nlnetlabs.nl>
Wed, 12 Nov 2025 15:43:56 +0000 (16:43 +0100)
until a value is available for it, in ldns_resolver_search_status

Changelog
resolver.c

index 76714386be7e31e63a8976066e40b58eb3f13ffd..762c68566450d5b94fb5fa05eddd3ecadbdea591 100644 (file)
--- a/Changelog
+++ b/Changelog
@@ -1,4 +1,4 @@
-1.8.5  2024-??-??
+1.8.5  2025-11-??
        * PR #246: Make ldns_calc_keytag() available for CDNSKEY RR
          Thanks tgreenx and pnax
        * PR #247: Make ldns_key_rr2ds() available for CDNSKEY RR
          instead of passing by when one RRSIG validates. That prints output
          for spurious RRSIGs, the failures for them.
        * Fix RR types NSAP-PTR, GPOS and RESINFO to print unquoted strings.
-  * Fix memory leak when trying to read zones that have equal RRs.
+       * Fix memory leak when trying to read zones that have equal RRs.
          the ldns_dnssec_*_add_rr() functions now return LDNS_STATUS_EQUAL_RR
          when an already existing RR is tried to be added. This is a API
          change, hence this also bumps the version to 1.9.0
+       * PR #282: ensure returning pkt with LDNS_STATUS_OK. Thanks grobian.
 
 1.8.4  2024-07-19
        * Fix building documentation in build directory.
index 1b1c43bc67654500d9abef69ba2bc90829ee82ec..0f2fdb52e5d07c9322638451c2132a19e46cdbdf 100644 (file)
@@ -1062,6 +1062,8 @@ ldns_resolver_search_status(ldns_pkt** pkt,
                /* query as-is */
                return ldns_resolver_query_status(pkt, r, name, t, c, flags);
        } else if (ldns_resolver_dnsrch(r)) {
+               ldns_pkt *return_pkt = NULL;
+
                search_list = ldns_resolver_searchlist(r);
                for (i = 0; i <= ldns_resolver_searchlist_count(r); i++) {
                        if (i == ldns_resolver_searchlist_count(r)) {
@@ -1072,22 +1074,25 @@ ldns_resolver_search_status(ldns_pkt** pkt,
                                                search_list[i]);
                        }
 
-                       s = ldns_resolver_query_status(pkt, r,
+                       s = ldns_resolver_query_status(&return_pkt, r,
                                        new_name, t, c, flags);
                        ldns_rdf_deep_free(new_name);
 
-                       if (pkt && *pkt) {
+                       if (return_pkt) {
                                if (s == LDNS_STATUS_OK && 
-                                               ldns_pkt_get_rcode(*pkt) ==
-                                               LDNS_RCODE_NOERROR) {
+                                               ldns_pkt_get_rcode(return_pkt)
+                                               == LDNS_RCODE_NOERROR) {
 
                                        return LDNS_STATUS_OK;
                                } else if (i < ldns_resolver_searchlist_count(r)) {
-                                       ldns_pkt_free(*pkt);
-                                       *pkt = NULL;
+                                       ldns_pkt_free(return_pkt);
+                                       return_pkt = NULL;
                                }
                        }
                }
+               if (pkt && return_pkt) {
+                       *pkt = return_pkt;
+               }
        }
        return s;
 }