From 7111f5e4c2fdf56e853fd3835c7b06ab79219aae Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Fri, 31 Jan 2025 09:09:33 +1100 Subject: [PATCH] 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 5e49a9e4ae8d0a78fb5ac0c7b683de9a29b6b848) --- lib/dns/rbtdb.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/lib/dns/rbtdb.c b/lib/dns/rbtdb.c index 8a63d5312a..6b35b25715 100644 --- a/lib/dns/rbtdb.c +++ b/lib/dns/rbtdb.c @@ -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; } }