Fix "CNAME and other data" detection

prio_type was being used in the wrong place to optimize cname_and_other.
We have to first exclude and accepted types and we also have to
determine that the record exists before we can check if we are at
a point where a later CNAME cannot appear.

(cherry picked from commit 5e49a9e4ae)
This commit is contained in:
Mark Andrews 2025-01-31 09:09:33 +11:00
parent 4adf01503a
commit 7111f5e4c2

View file

@ -6145,14 +6145,6 @@ cname_and_other_data(dns_rbtnode_t *node, rbtdb_serial_t serial) {
*/
for (header = node->data; header != NULL; header = header_next) {
header_next = header->next;
if (!prio_type(header->type)) {
/*
* CNAME is in the priority list, so if we are done
* with the priority list, we know there will not be
* CNAME, so we are safe to skip the rest of the types.
*/
return false;
}
if (header->type == dns_rdatatype_cname) {
/*
* Look for an active extant CNAME.
@ -6208,6 +6200,16 @@ cname_and_other_data(dns_rbtnode_t *node, rbtdb_serial_t serial) {
}
} while (header != NULL);
if (header != NULL) {
if (!prio_type(header->type)) {
/*
* CNAME is in the priority
* list, so if we are done with
* priority types, we know there
* will not be a CNAME, and are
* safe to skip the rest.
*/
return cname;
}
other_data = true;
}
}