From: Willem Toorop Date: Thu, 14 Jul 2022 08:07:02 +0000 (+0200) Subject: Eliminate non-const cast X-Git-Tag: 1.8.2-rc.1~3^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b50e3594e12fe0c564b1127183fd469c31ab9188;p=thirdparty%2Fldns.git Eliminate non-const cast --- diff --git a/host2str.c b/host2str.c index 179ed71b..7282db9e 100644 --- a/host2str.c +++ b/host2str.c @@ -43,6 +43,10 @@ #define INET6_ADDRSTRLEN 46 #endif +/* Internal helper function */ +ldns_edns_option_list* +pkt_edns_data2edns_option_list(const ldns_rdf *edns_data); + /* lookup tables for standard DNS stuff */ /* Taken from RFC 2535, section 7. */ @@ -2778,8 +2782,9 @@ ldns_pkt2buffer_str_fmt(ldns_buffer *output, ldns_edns_option_list* edns_list; /* parse the EDNS data into separate EDNS options * and add them to the list */ - if ((edns_list = ldns_pkt_edns_get_option_list((ldns_pkt *)pkt))) { + if ((edns_list = pkt_edns_data2edns_option_list(ldns_pkt_edns_data(pkt)))) { ldns_edns_option_list2buffer_str(output, edns_list); + ldns_edns_option_list_deep_free(edns_list); } else { ldns_buffer_printf(output, ";; Data: "); (void)ldns_rdf2buffer_str(output, ldns_pkt_edns_data(pkt)); diff --git a/packet.c b/packet.c index 96adaabd..afa59005 100644 --- a/packet.c +++ b/packet.c @@ -759,37 +759,28 @@ ldns_pkt_edns(const ldns_pkt *pkt) } ldns_edns_option_list* -ldns_pkt_edns_get_option_list(ldns_pkt *packet) +pkt_edns_data2edns_option_list(const ldns_rdf *edns_data) { size_t pos = 0; ldns_edns_option_list* edns_list; size_t max; const uint8_t* wire; - /* return the list if it already exists */ - if (packet->_edns_list != NULL) { - return packet->_edns_list; - } - - /* if the list doesn't exists, we create it by parsing the - * packet->_edns_data - */ - if (!ldns_pkt_edns_data(packet)) { + if (!edns_data) return NULL; - } - assert(ldns_pkt_edns_data(packet)); - max = ldns_rdf_size(ldns_pkt_edns_data(packet)); - wire = ldns_rdf_data(ldns_pkt_edns_data(packet)); + max = ldns_rdf_size(edns_data); + wire = ldns_rdf_data(edns_data); + if (!max) + return NULL; - edns_list = ldns_edns_option_list_new(); - if (edns_list == NULL) { + if (!(edns_list = ldns_edns_option_list_new())) return NULL; - } while (pos < max) { ldns_edns_option* edns; uint8_t *data; + if (pos + 4 > max) { /* make sure the header is */ ldns_edns_option_list_deep_free(edns_list); return NULL; @@ -817,12 +808,30 @@ ldns_pkt_edns_get_option_list(ldns_pkt *packet) ldns_edns_option_list_deep_free(edns_list); return NULL; } - ldns_edns_option_list_push(edns_list, edns); - + if (!ldns_edns_option_list_push(edns_list, edns)) { + ldns_edns_option_list_deep_free(edns_list); + return NULL; + } } + return edns_list; + +} + +ldns_edns_option_list* +ldns_pkt_edns_get_option_list(ldns_pkt *packet) +{ + /* return the list if it already exists */ + if (packet->_edns_list != NULL) + return packet->_edns_list; + + /* if the list doesn't exists, we create it by parsing the + * packet->_edns_data + */ + if (!ldns_pkt_edns_data(packet)) + return NULL; - packet->_edns_list = edns_list; - return packet->_edns_list; + return ( packet->_edns_list + = pkt_edns_data2edns_option_list(ldns_pkt_edns_data(packet))); }