]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Fix that after malloc failure in find_tag_datas, the
authorW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Tue, 16 Jun 2026 08:51:49 +0000 (10:51 +0200)
committerW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Tue, 16 Jun 2026 08:51:49 +0000 (10:51 +0200)
  local_alias is cleaned up. Thanks to Qifan Zhang, Palo
  Alto Networks, for the report.

doc/Changelog
services/localzone.c
util/data/msgencode.c

index 2672f3319637212733f53b5d35deede60de9a0c8..742ae01006ba4542e9977a5c850cb077bce3f707 100644 (file)
@@ -47,6 +47,9 @@
        - Fix incorrect cleanup after an allocation failure for
          a delegation point. Thanks to Qifan Zhang, Palo Alto
          Networks, for the report.
+       - Fix that after malloc failure in find_tag_datas, the
+         local_alias is cleaned up. Thanks to Qifan Zhang, Palo
+         Alto Networks, for the report.
 
 15 June 2026: Wouter
        - Fix to add `max-transfer-size` and `max-transfer-time` that
index a5c11faf55161d184445d1c5dbae2574af915cb0..8eebd962a1640d4fb4ea159018e0d95492c31d16 100644 (file)
@@ -1502,8 +1502,10 @@ find_tag_datas(struct query_info* qinfo, struct config_strlist* list,
                        return 0; /* out of memory */
                qinfo->local_alias->rrset =
                        regional_alloc_init(temp, r, sizeof(*r));
-               if(!qinfo->local_alias->rrset)
+               if(!qinfo->local_alias->rrset) {
+                       qinfo->local_alias = NULL;
                        return 0; /* out of memory */
+               }
        }
        return result;
 }
index b1311111b51d982a67ac3a29ea51f1a850d706e1..8e55e13f1e07e0db41126a8827481efd3e4b15a5 100644 (file)
@@ -1129,9 +1129,11 @@ extended_error_encode(sldns_buffer* buf, uint16_t rcode,
        sldns_buffer_write(buf, &flags, sizeof(uint16_t));
        sldns_buffer_write(buf, &flags, sizeof(uint16_t));
        if(qinfo) {
-               const uint8_t* qname = qinfo->local_alias ?
+               const uint8_t* qname =
+                       (qinfo->local_alias && qinfo->local_alias->rrset) ?
                        qinfo->local_alias->rrset->rk.dname : qinfo->qname;
-               size_t qname_len = qinfo->local_alias ?
+               size_t qname_len =
+                       (qinfo->local_alias && qinfo->local_alias->rrset) ?
                        qinfo->local_alias->rrset->rk.dname_len :
                        qinfo->qname_len;
                if(sldns_buffer_current(buf) == qname)