]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
ldns_pkt_edns() also true for `_edns_list`s
authorWillem Toorop <willem@nlnetlabs.nl>
Thu, 14 Jul 2022 07:33:44 +0000 (09:33 +0200)
committerWillem Toorop <willem@nlnetlabs.nl>
Thu, 14 Jul 2022 07:33:44 +0000 (09:33 +0200)
+ few fixes for memory management errors

drill/drill.c
host2wire.c
packet.c

index 62e0c4dd4f5d196ae5d686002dc08cd26496b35e..611c81f3a8e37e825f29db3d5e0854ca7f55b003 100644 (file)
@@ -907,6 +907,7 @@ main(int argc, char *argv[])
                                        }
 
                                        status = ldns_resolver_send_pkt(&pkt, res, qpkt);
+                                       ldns_pkt_free(qpkt);
 
                                        if (status != LDNS_STATUS_OK) {
                                                error("error sending query: %s"
index 32c9c5454ffc0763a60df451e0c160e563b9d440..49e4924a92f386ea04eadcb18216a4e4e4ee918b 100644 (file)
@@ -443,21 +443,16 @@ ldns_pkt2buffer_wire_compress(ldns_buffer *buffer, const ldns_pkt *packet, ldns_
                ldns_write_uint16(&edata[2], ldns_pkt_edns_z(packet));
                ldns_rr_set_ttl(edns_rr, ldns_read_uint32(edata));
                /* don't forget to add the edns rdata (if any) */
-               edns_buf = ldns_edns_option_list2wireformat_buffer(packet->_edns_list);
-               if (edns_buf)
+               if ((edns_buf = ldns_edns_option_list2wireformat_buffer(packet->_edns_list))) {
                        edns_rdf = ldns_rdf_new( LDNS_RDF_TYPE_UNKNOWN
                                               , ldns_buffer_limit(edns_buf)
                                               , ldns_buffer_export(edns_buf));
-               ldns_buffer_free(edns_buf);
-               if (edns_rdf) {
-                       ldns_rr_push_rdf(edns_rr, edns_rdf);
-                       ldns_rdf_deep_free(edns_rdf);
-
-               } else if (packet->_edns_data)
-                       ldns_rr_push_rdf(edns_rr, packet->_edns_data);
+                       ldns_buffer_free(edns_buf);
+               }
+               ldns_rr_push_rdf(edns_rr, edns_rdf ? edns_rdf : packet->_edns_data);
                (void)ldns_rr2buffer_wire_compress(buffer, edns_rr, LDNS_SECTION_ADDITIONAL, compression_data);
                /* take the edns rdata back out of the rr before we free rr */
-               if (packet->_edns_data)
+               if (!edns_rdf)
                        (void)ldns_rr_pop_rdf (edns_rr);
                ldns_rr_free(edns_rr);
        }
index 3562b3999662f0441628d18c80cb740ec204d6d5..96adaabdcb19dc66490fe3e20fd30b2e855cec3e 100644 (file)
--- a/packet.c
+++ b/packet.c
@@ -753,6 +753,7 @@ ldns_pkt_edns(const ldns_pkt *pkt)
                ldns_pkt_edns_extended_rcode(pkt) > 0 ||
                ldns_pkt_edns_data(pkt) ||
                ldns_pkt_edns_do(pkt) ||
+               pkt->_edns_list ||
                 pkt->_edns_present
               );
 }