]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
Eliminate non-const cast
authorWillem Toorop <willem@nlnetlabs.nl>
Thu, 14 Jul 2022 08:07:02 +0000 (10:07 +0200)
committerWillem Toorop <willem@nlnetlabs.nl>
Thu, 14 Jul 2022 08:07:02 +0000 (10:07 +0200)
host2str.c
packet.c

index 179ed71bd944694a1f3a1eec38481b3fbdfc261d..7282db9ee2efed6ba40477e8c7566e766237cf67 100644 (file)
 #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));
index 96adaabdcb19dc66490fe3e20fd30b2e855cec3e..afa59005c3bda65e35a0d521327d648d427f5c16 100644 (file)
--- 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)));
 }