do not memcmp against uninitialized bytes

silences valgrind warnings

reported in #585

Change-Id: I40098d6eab5e128b537fb0cc2821b60d3553c4cb
pull/586/head
Richard Fuchs 7 years ago
parent 0aeb06f613
commit 694e9d8f60

@ -258,7 +258,7 @@ static void output_init(struct msghdr *mh, struct iovec *iov,
}
INLINE void __output_add(struct msghdr *mh, struct tlv *tlv, unsigned int len, u_int16_t code,
void *append, unsigned int append_len)
void *append, unsigned int append_len, int writable)
{
struct iovec *iov;
struct header *hdr;
@ -278,21 +278,21 @@ INLINE void __output_add(struct msghdr *mh, struct tlv *tlv, unsigned int len, u
iov->iov_base = append; /* must have space for padding */
iov->iov_len = (append_len + 3) & 0xfffc;
if ((append_len & 0x3)) {
if (memcmp(append + append_len, "\0\0\0", 4 - (append_len & 0x3)))
memset(append + append_len, 0, 4 - (append_len & 0x3));
}
if (writable && (append_len & 0x3)) // if not writable, buffer must have trailing \0\0\0
memset(append + append_len, 0, 4 - (append_len & 0x3));
}
}
#define output_add(mh, attr, code) \
__output_add(mh, &(attr)->tlv, sizeof(*(attr)), code, NULL, 0)
__output_add(mh, &(attr)->tlv, sizeof(*(attr)), code, NULL, 0, 0)
#define output_add_len(mh, attr, code, len) \
__output_add(mh, &(attr)->tlv, len + sizeof(struct tlv), code, NULL, 0)
#define output_add_data(mh, attr, code, data, len) \
__output_add(mh, &(attr)->tlv, sizeof(*(attr)), code, data, len)
__output_add(mh, &(attr)->tlv, len + sizeof(struct tlv), code, NULL, 0, 0)
#define output_add_data_wr(mh, attr, code, data, len) \
__output_add(mh, &(attr)->tlv, sizeof(*(attr)), code, data, len, 1)
#define output_add_data_ro(mh, attr, code, data, len) \
__output_add(mh, &(attr)->tlv, sizeof(*(attr)), code, data, len, 0)
#define output_add_data_len_pad(mh, attr, code, data, len) \
__output_add(mh, &(attr)->tlv, sizeof((attr)->tlv), code, data, len)
__output_add(mh, &(attr)->tlv, sizeof((attr)->tlv), code, data, len, 1)
static void __output_finish(struct msghdr *mh) {
@ -307,7 +307,7 @@ static void output_finish_src(struct msghdr *mh) {
static void software(struct msghdr *mh, struct software *sw) {
int i;
i = snprintf(sw->str, sizeof(sw->str) - 1, "rtpengine-%s", RTPENGINE_VERSION);
i = snprintf(sw->str, sizeof(sw->str), "rtpengine-%s", RTPENGINE_VERSION);
output_add_data_len_pad(mh, sw, STUN_SOFTWARE, sw->str, i);
}
@ -389,9 +389,9 @@ static void stun_error_len(struct stream_fd *sfd, const endpoint_t *sin,
software(&mh, &sw);
ec.codes = htonl(((code / 100) << 8) | (code % 100));
output_add_data(&mh, &ec, STUN_ERROR_CODE, reason, len);
output_add_data_ro(&mh, &ec, STUN_ERROR_CODE, reason, len);
if (attr_cont)
output_add_data(&mh, &aa, add_attr, attr_cont, attr_len);
output_add_data_wr(&mh, &aa, add_attr, attr_cont, attr_len);
integrity(&mh, &mi, &sfd->stream->media->ice_agent->pwd[0]);
fingerprint(&mh, &fp);
@ -665,7 +665,7 @@ int stun_binding_request(const endpoint_t *dst, u_int32_t transaction[3], str *p
STR_FMT(&ufrags[0]), STR_FMT(&ufrags[1]));
if (i <= 0 || i >= sizeof(username_buf))
return -1;
output_add_data(&mh, &un_attr, STUN_USERNAME, username_buf, i);
output_add_data_wr(&mh, &un_attr, STUN_USERNAME, username_buf, i);
cc.tiebreaker = htobe64(tiebreaker);
output_add(&mh, &cc, controlling ? STUN_ICE_CONTROLLING : STUN_ICE_CONTROLLED);

Loading…
Cancel
Save