]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Fix cache_lookup subnet print to not print messages without rrsets
authorW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Fri, 15 Aug 2025 14:04:23 +0000 (16:04 +0200)
committerW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Fri, 15 Aug 2025 14:04:23 +0000 (16:04 +0200)
  and perform in-depth check on node in the addrtree.

daemon/remote.c

index 9d9e53703d79c47e69a4d5361441c872b1b99cc6..25c390c825c92639b1d22aa89beeefb8b2f6aae9 100644 (file)
@@ -1785,10 +1785,6 @@ cache_lookup_subnet_addrnode(struct query_info* q, struct reply_info* d,
        sldns_wire2str_dname_buf(q->qname, q->qname_len, s, sizeof(s));
        sldns_wire2str_type_buf(q->qtype, tp, sizeof(tp));
        sldns_wire2str_class_buf(q->qclass, cl, sizeof(cl));
-       if(!ssl_printf(inf->ssl, "subnet %s/%d%s %s %s %s " ARG_LL "d\n", astr,
-               (int)scope, (only_match_scope_zero?" scope_zero":""),
-               s, cl, tp, (long long)(ttl-*inf->worker->env.now)))
-               return;
        sldns_wire2str_rcode_buf(FLAGS_GET_RCODE(d->flags),
                rc, sizeof(rc));
        snprintf(fg, sizeof(fg), "%s%s%s%s%s%s%s%s",
@@ -1805,6 +1801,12 @@ cache_lookup_subnet_addrnode(struct query_info* q, struct reply_info* d,
                /* rrsets have timed out or do not exist */
                return;
        }
+       if(!ssl_printf(inf->ssl, "subnet %s/%d%s %s %s %s " ARG_LL "d\n", astr,
+               (int)scope, (only_match_scope_zero?" scope_zero":""),
+               s, cl, tp, (long long)(ttl-*inf->worker->env.now))) {
+               rrset_array_unlock(d->ref, d->rrset_count);
+               return;
+       }
        ssl_printf(inf->ssl,
                "subnet msg %s %s %s%s %s %d %d " ARG_LL "d %d %u %u %u %d %s\n",
                s, cl, tp, fg, rc,
@@ -1842,7 +1844,7 @@ addrtree_traverse_visit_edge(struct addredge* edge, addrkey_t* addr,
 {
        size_t n;
        addrlen_t addrlen;
-       if(!edge)
+       if(!edge || !edge->node)
                return;
        addrlen = edge->len;
        /* ceil() */