fix: nil: "Don't use dns_name_fromstring in dsyncfetch_start"

Closes #5697

Merge branch '5697-don-t-use-dns_name_fromstring-in-dsyncfetch_start' into 'main'

See merge request isc-projects/bind9!11405
This commit is contained in:
Mark Andrews 2025-12-22 19:55:46 +11:00
commit ffc02b12c9
2 changed files with 21 additions and 24 deletions

View file

@ -58,9 +58,8 @@ typedef struct dns_zonefetch_methods {
* Fetch contexts.
*/
struct dns_dsyncfetch {
dns_fixedname_t fname;
dns_fixedname_t dsyncname;
dns_name_t pname;
dns_name_t dsyncname;
};
struct dns_keyfetch {

View file

@ -21120,12 +21120,14 @@ zone_checkds(dns_zone_t *zone) {
#endif /* ifdef ENABLE_AFL */
}
static unsigned char _dsync_data[] = "\x06_dsync";
static dns_name_t _dsync = DNS_NAME_INITNONABSOLUTE(_dsync_data);
static isc_result_t
dsyncfetch_start(dns_zonefetch_t *fetch) {
dns_dsyncfetch_t *dsyncfetch;
dns_zone_t *zone;
dns_fixedname_t fndl, fnp;
dns_name_t *name, *dsyncname, *dsynclabel, *prefix;
dns_name_t *dsyncname, prefix;
unsigned int nlabels;
isc_result_t result;
@ -21140,24 +21142,14 @@ dsyncfetch_start(dns_zonefetch_t *fetch) {
* The prefix is the relative domain name of the child consisting of
* the labels under the zonecut.
*/
dsyncname = dns_fixedname_initname(&dsyncfetch->fname);
dsynclabel = dns_fixedname_initname(&fndl);
dns_name_fromstring(dsynclabel, "_dsync", NULL, 0, fetch->mctx);
result = dns_name_concatenate(dsynclabel, &dsyncfetch->pname,
dsyncname);
if (result != ISC_R_SUCCESS) {
dnssec_log(zone, ISC_LOG_ERROR,
"dsyncfetch: failed to create parent DSYNC fetch "
"(parent part): %s",
isc_result_totext(result));
return result;
}
dsyncname = dns_fixedname_initname(&dsyncfetch->dsyncname);
name = dns_fixedname_name(&fetch->name);
nlabels = dns_name_countlabels(&dsyncfetch->pname);
prefix = dns_fixedname_initname(&fnp);
dns_name_split(name, nlabels, prefix, NULL);
result = dns_name_concatenate(prefix, dsyncname, dsyncname);
dns_name_init(&prefix);
dns_name_split(dns_fixedname_name(&fetch->name), nlabels, &prefix,
NULL);
result = dns_name_concatenate(&prefix, &_dsync, dsyncname);
if (result != ISC_R_SUCCESS) {
dnssec_log(zone, ISC_LOG_ERROR,
"dsyncfetch: failed to create parent DSYNC fetch "
@ -21166,11 +21158,17 @@ dsyncfetch_start(dns_zonefetch_t *fetch) {
return result;
}
dns_name_init(&dsyncfetch->dsyncname);
dns_name_clone(dsyncname, &dsyncfetch->dsyncname);
result = dns_name_concatenate(dsyncname, &dsyncfetch->pname, dsyncname);
if (result != ISC_R_SUCCESS) {
dnssec_log(zone, ISC_LOG_ERROR,
"dsyncfetch: failed to create parent DSYNC fetch "
"(parent part): %s",
isc_result_totext(result));
return result;
}
fetch->qtype = dns_rdatatype_dsync;
fetch->qname = &dsyncfetch->dsyncname;
fetch->qname = dsyncname;
return ISC_R_SUCCESS;
}
@ -21246,7 +21244,7 @@ dsyncfetch_done(dns_zonefetch_t *fetch, isc_result_t eresult) {
dsyncfetch = &fetch->fetchdata.dsyncfetch;
zone = fetch->zone;
rrset = &fetch->rrset;
dsyncname = &dsyncfetch->dsyncname;
dsyncname = dns_fixedname_name(&dsyncfetch->dsyncname);
zone->fetchcount[ZONEFETCHTYPE_DSYNC]--;