From: Willem Toorop Date: Wed, 12 Nov 2025 15:43:56 +0000 (+0100) Subject: Don't touch return variable pkt by reference... X-Git-Tag: 1.9.0-rc.1~21 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d1fef3f1bcafd6ac44240b06c8b6c5483e4a1b2b;p=thirdparty%2Fldns.git Don't touch return variable pkt by reference... until a value is available for it, in ldns_resolver_search_status --- diff --git a/Changelog b/Changelog index 76714386..762c6856 100644 --- 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 @@ -17,10 +17,11 @@ 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. diff --git a/resolver.c b/resolver.c index 1b1c43bc..0f2fdb52 100644 --- a/resolver.c +++ b/resolver.c @@ -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; }