]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
add check in ldns_edns_option_list_clone features/rfc-6891-individual-edns-option-parsing 167/head
authorTCY16 <tom@nlnetlabs.nl>
Thu, 14 Jul 2022 13:33:49 +0000 (15:33 +0200)
committerTCY16 <tom@nlnetlabs.nl>
Thu, 14 Jul 2022 13:33:49 +0000 (15:33 +0200)
edns.c

diff --git a/edns.c b/edns.c
index b9d1828b3c80e72e0d8765243d1ef5b05efaf060..bdb4bf1cf9ce74a6339b42e85a629a180fa50a0c 100644 (file)
--- a/edns.c
+++ b/edns.c
@@ -202,8 +202,11 @@ ldns_edns_option_list_clone(ldns_edns_option_list *old_list)
 
        /* adding options also updates the total options size */
        for (i = 0; i < old_list->_option_count; i++) {
-               ldns_edns_option_list_push(new_list,
-                       ldns_edns_clone(ldns_edns_option_list_get_option(old_list, i)));
+               if (!(ldns_edns_option_list_push(new_list,
+                       ldns_edns_clone(ldns_edns_option_list_get_option(old_list, i))))){
+                       ldns_edns_option_list_deep_free(new_list);
+                       return NULL;
+               }
        }
 
        return new_list;
@@ -350,7 +353,7 @@ ldns_edns_option_list_pop(ldns_edns_option_list *option_list)
        cap = option_list->_option_capacity;
        count = ldns_edns_option_list_get_count(option_list);
 
-       if (count == 0){
+       if (count == 0) {
                return NULL;
        }
        /* get the last option from the list */
@@ -388,8 +391,9 @@ ldns_edns_option_list2wireformat_buffer(const ldns_edns_option_list *option_list
        ldns_edns_option *edns;
        uint8_t* data = NULL;
 
-       if (!option_list)
+       if (!option_list) {
                return NULL;
+       }
 
        /* get the number of EDNS options in the list*/
        list_size = ldns_edns_option_list_get_count(option_list);
@@ -397,8 +401,10 @@ ldns_edns_option_list2wireformat_buffer(const ldns_edns_option_list *option_list
        /* create buffer the size of the total EDNS wireformat options */
        options_size = ldns_edns_option_list_get_options_size(option_list);
        buffer = ldns_buffer_new(options_size);
-       if (!buffer)
+       
+       if (!buffer) {
                return NULL;
+       }
 
        /* write individual serialized EDNS options to final buffer*/
        for (i = 0; i < list_size; i++) {