]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
Fix mandatory parsing and ech printing
authorWillem Toorop <willem@nlnetlabs.nl>
Tue, 25 May 2021 13:56:19 +0000 (15:56 +0200)
committerWillem Toorop <willem@nlnetlabs.nl>
Tue, 25 May 2021 13:56:19 +0000 (15:56 +0200)
sldns/str2wire.c
sldns/wire2str.c

index 1b09766bc4f03a676b2f66950ce9435f5670c286..df244910e7c793776051c3f06a07b7d10d330d11 100644 (file)
@@ -1168,8 +1168,8 @@ sldns_str2wire_svcbparam_mandatory(const char* val, uint8_t* rd, size_t* rd_len)
                        return -1;
                }
        }
-
-       // @TODO check if we have space to write in rd_len; look for the best spot
+       if (sizeof(uint16_t) * (count + 2) > *rd_len)
+               return LDNS_WIREPARSE_ERR_BUFFER_TOO_SMALL;
 
        sldns_write_uint16(rd, SVCB_KEY_MANDATORY);
        sldns_write_uint16(rd + 2, sizeof(uint16_t) * count);
@@ -1179,12 +1179,12 @@ sldns_str2wire_svcbparam_mandatory(const char* val, uint8_t* rd, size_t* rd_len)
                if (!(next_key = strchr(val, ','))) {
                        sldns_write_uint16(rd + *rd_len,
                                sldns_str2wire_svcparam_key_lookup(val, val_len));
-                       *rd_len += LDNS_IP6ADDRLEN;
+                       *rd_len += 2;
                        break;
                } else {
                        sldns_write_uint16(rd + *rd_len,
                                sldns_str2wire_svcparam_key_lookup(val, next_key - val));
-                       *rd_len += LDNS_IP6ADDRLEN;
+                       *rd_len += 2;
                }
 
                val_len -= next_key - val + 1;
index f6c32cfe3370f3001641d19472e643165e04677f..07a4911c4a26df6bb85b83188e0abf47de033ada 100644 (file)
@@ -1091,14 +1091,14 @@ static int sldns_wire2str_svcparam_ech2str(char** s,
        size_t* slen, uint16_t data_len, uint8_t* data)
 {
        int size;
-       int w;
+       int w = 0;
 
        assert(data_len > 0); /* Guaranteed by rdata_svcparam_to_string */
 
        w += sldns_str_print(s, slen, "=\"");
 
        /* b64_ntop_calculate size includes null at the end */
-       size = sldns_b64_ntop_calculate_size(data_len);
+       size = sldns_b64_ntop_calculate_size(data_len) - 1;
 
        // @TODO store return value?
        sldns_b64_ntop(data, data_len, *s, *slen);