From: Tom Carpay Date: Mon, 10 May 2021 12:19:50 +0000 (+0000) Subject: fix memcpy of buffer for ech X-Git-Tag: release-1.13.2rc1~42^2~35 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b61d098950d444432b3bb385953370a67425b06f;p=thirdparty%2Funbound.git fix memcpy of buffer for ech --- diff --git a/sldns/str2wire.c b/sldns/str2wire.c index 8a3a1e22a..5a9c5eed8 100644 --- a/sldns/str2wire.c +++ b/sldns/str2wire.c @@ -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; } }