]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
fix memcpy of buffer for ech
authorTom Carpay <tom@nlnetlabs.nl>
Mon, 10 May 2021 12:19:50 +0000 (12:19 +0000)
committerTom Carpay <tom@nlnetlabs.nl>
Mon, 10 May 2021 12:19:50 +0000 (12:19 +0000)
sldns/str2wire.c

index 8a3a1e22aaf827209e63c9eb0910b8af2c4020dc..5a9c5eed845f3be1c41949dc72865908044b4c87 100644 (file)
@@ -1206,8 +1206,8 @@ sldns_str2wire_svcbparam_no_default_alpn(const char* val, uint8_t* rd, size_t* r
        if (*rd_len < 4)
                return LDNS_WIREPARSE_ERR_BUFFER_TOO_SMALL;
 
-       sldns_write_uint16(rd, htons(SVCB_KEY_NO_DEFAULT_ALPN));
-       sldns_write_uint16(rd + 2, htons(0));
+       sldns_write_uint16(rd, SVCB_KEY_NO_DEFAULT_ALPN);
+       sldns_write_uint16(rd + 2, 0);
        *rd_len = 4;
 
        return LDNS_WIREPARSE_ERR_OK;
@@ -1229,14 +1229,13 @@ sldns_str2wire_svcbparam_ech_value(const char* val, uint8_t* rd, size_t* rd_len)
        if (wire_len == -1) {
                // zc_error_prev_line("invalid base64 data in ech");
                return LDNS_WIREPARSE_ERR_INVALID_STR;
+       } else if (wire_len + 4 > *rd_len) {
+               return LDNS_WIREPARSE_ERR_BUFFER_TOO_SMALL;
        } else {
-               sldns_write_uint16(rd, htons(SVCB_KEY_ECH));
-               sldns_write_uint16(rd + 2, htons(wire_len));
-
-               // @TODO memcpy?
-               sldns_write_uint16(rd + 4, htons(buffer));
+               sldns_write_uint16(rd, SVCB_KEY_ECH);
+               sldns_write_uint16(rd + 2, wire_len);
+               memcpy(rd + 4, buffer, wire_len);
                *rd_len = 4 + wire_len;
-
                return LDNS_WIREPARSE_ERR_OK;
        }
 }