From 6f4b439a5f4a003c9bca334bab3beaa01328064d Mon Sep 17 00:00:00 2001 From: Peter Wu Date: Wed, 24 Apr 2013 10:55:25 +0200 Subject: Fix compiler warnings The memcpy bug is actually a real one-by-off. Since the msg_long struct is contained in a union of hidpp_message, this does not lead to write-past-boundaries (but it may read more than intended). Some fields of version could be uninitialised (when the register query failed). Explicitly clear the values to make clang happy. --- ltunify.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ltunify.c b/ltunify.c index 127dd12..a14deaf 100644 --- a/ltunify.c +++ b/ltunify.c @@ -402,12 +402,12 @@ static bool set_register(int fd, u8 device_index, u8 address, msg.report_id = LONG_MESSAGE; exp_sub_id = SUB_SET_LONG_REGISTER; msg.msg_long.address = address; - memcpy(&msg.msg_long.str, params, LONG_MESSAGE_LEN - HEADER_SIZE); + memcpy(&msg.msg_long.str, params, sizeof msg.msg_long.str); } else { msg.report_id = SHORT_MESSAGE; exp_sub_id = SUB_SET_REGISTER; msg.msg_short.address = address; - memcpy(&msg.msg_short.value, params, SHORT_MESSAGE_LEN - HEADER_SIZE); + memcpy(&msg.msg_short.value, params, sizeof msg.msg_short.value); } msg.sub_id = exp_sub_id; @@ -717,6 +717,8 @@ bool get_device_version(int fd, u8 device_index, u8 version_type, struct val_reg bool get_device_versions(int fd, u8 device_index, struct version *version) { struct val_reg_version ver; + memset(version, 0, sizeof *version); + if (get_device_version(fd, device_index, VERSION_FIRMWARE, &ver)) { version->fw_major = ver.v1; version->fw_minor = ver.v2; -- cgit v1.2.1