From 228f0b23ed3c5f4cd28c6543e24a84af6d87bf32 Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Mon, 15 Aug 2022 12:15:11 +0200 Subject: [PATCH] Proper fix for issue #183 EDNS OPT can have no rdata --- host2wire.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/host2wire.c b/host2wire.c index 49e4924a..d1539214 100644 --- a/host2wire.c +++ b/host2wire.c @@ -449,10 +449,16 @@ ldns_pkt2buffer_wire_compress(ldns_buffer *buffer, const ldns_pkt *packet, ldns_ , ldns_buffer_export(edns_buf)); ldns_buffer_free(edns_buf); } - ldns_rr_push_rdf(edns_rr, edns_rdf ? edns_rdf : packet->_edns_data); + if (edns_rdf) + ldns_rr_push_rdf(edns_rr, edns_rdf); + else if (packet->_edns_data) + ldns_rr_push_rdf(edns_rr, 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 (!edns_rdf) + /* if the rdata of the OPT came from packet->_edns_data + * we need to take it back out of the edns_rr before we free it + * so packet->_edns_data doesn't get freed + */ + if (!edns_rdf && packet->_edns_data) (void)ldns_rr_pop_rdf (edns_rr); ldns_rr_free(edns_rr); }