From d1fef3f1bcafd6ac44240b06c8b6c5483e4a1b2b Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Wed, 12 Nov 2025 16:43:56 +0100 Subject: [PATCH] Don't touch return variable pkt by reference... until a value is available for it, in ldns_resolver_search_status --- Changelog | 5 +++-- resolver.c | 17 +++++++++++------ 2 files changed, 14 insertions(+), 8 deletions(-) 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; } -- 2.47.3