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);
}