]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
Rewrite SVCB rdata in correct order
authorWillem Toorop <willem@nlnetlabs.nl>
Wed, 2 Jun 2021 10:56:54 +0000 (12:56 +0200)
committerWillem Toorop <willem@nlnetlabs.nl>
Wed, 2 Jun 2021 10:56:54 +0000 (12:56 +0200)
sldns/str2wire.c

index 5d3950fa7672233659e443a3bb4b970333d7572a..e72037017078563d85dfd37ec5020b8ff3396db8 100644 (file)
@@ -640,14 +640,14 @@ static int sldns_str2wire_check_svcbparams(uint8_t* rdata, uint16_t rdata_len)
                svcparams[nparams] = rdata_ptr;
                if (rdata_remaining < 4)
                        // @TODO verify that these are correct
-                       return LDNS_WIREPARSE_ERR_OK;
+                       return LDNS_WIREPARSE_ERR_GENERAL;
                svcbparam_len = sldns_read_uint16(rdata_ptr + 2);
                rdata_remaining -= 4;
                rdata_ptr += 4;
 
                if (rdata_remaining < svcbparam_len)
                        // @TODO verify that these are correct
-                       return LDNS_WIREPARSE_ERR_OK;
+                       return LDNS_WIREPARSE_ERR_GENERAL;
                rdata_remaining -= svcbparam_len;
                rdata_ptr += svcbparam_len;
 
@@ -655,7 +655,7 @@ static int sldns_str2wire_check_svcbparams(uint8_t* rdata, uint16_t rdata_len)
                if (nparams > sizeof(svcparams))
                        // @TODO Too many svcparams. Unbound allows only
                        //       sizeof(svcparams) svcparams.
-                       return LDNS_WIREPARSE_ERR_OK;
+                       return LDNS_WIREPARSE_ERR_GENERAL;
        }
 
        /* In draft-ietf-dnsop-svcb-https-05 Section 7:
@@ -714,11 +714,13 @@ static int sldns_str2wire_check_svcbparams(uint8_t* rdata, uint16_t rdata_len)
                uint16_t svcparam_len = sldns_read_uint16(svcparams[i] + 2)
                                      + 2 * sizeof(uint16_t);
 
+               if (new_rdata_ptr + svcparam_len - new_rdata > sizeof(new_rdata))
+                       return LDNS_WIREPARSE_ERR_BUFFER_TOO_SMALL;
+
                memcpy(new_rdata_ptr, svcparams[i], svcparam_len);
                new_rdata_ptr += svcparam_len;
        }
        memcpy(rdata, new_rdata, rdata_len);
-
        return LDNS_WIREPARSE_ERR_OK;
 }