From a7f2ceacb9ee09ab37302cddc0ce15a96fd95e70 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Wed, 14 Feb 2018 23:21:11 +0100 Subject: tools: normalize strncpy/snprintf usage --- src/tools/ipc.c | 8 +++++--- src/tools/set.c | 2 +- src/tools/setconf.c | 2 +- src/tools/show.c | 28 +++++++++++++++------------- 4 files changed, 22 insertions(+), 18 deletions(-) diff --git a/src/tools/ipc.c b/src/tools/ipc.c index 7223fd7..edc8e8f 100644 --- a/src/tools/ipc.c +++ b/src/tools/ipc.c @@ -114,7 +114,7 @@ static FILE *userspace_interface_file(const char *interface) ret = -EINVAL; if (strchr(interface, '/')) goto out; - ret = snprintf(addr.sun_path, sizeof(addr.sun_path) - 1, SOCK_PATH "%s" SOCK_SUFFIX, interface); + ret = snprintf(addr.sun_path, sizeof(addr.sun_path), SOCK_PATH "%s" SOCK_SUFFIX, interface); if (ret < 0) goto out; ret = stat(addr.sun_path, &sbuf); @@ -155,7 +155,7 @@ static bool userspace_has_wireguard_interface(const char *interface) if (strchr(interface, '/')) return false; - if (snprintf(addr.sun_path, sizeof(addr.sun_path) - 1, SOCK_PATH "%s" SOCK_SUFFIX, interface) < 0) + if (snprintf(addr.sun_path, sizeof(addr.sun_path), SOCK_PATH "%s" SOCK_SUFFIX, interface) < 0) return false; if (stat(addr.sun_path, &sbuf) < 0) return false; @@ -834,8 +834,10 @@ static int parse_device(const struct nlattr *attr, void *data) device->ifindex = mnl_attr_get_u32(attr); break; case WGDEVICE_A_IFNAME: - if (!mnl_attr_validate(attr, MNL_TYPE_STRING)) + if (!mnl_attr_validate(attr, MNL_TYPE_STRING)) { strncpy(device->name, mnl_attr_get_str(attr), sizeof(device->name) - 1); + device->name[sizeof(device->name) - 1] = '\0'; + } break; case WGDEVICE_A_PRIVATE_KEY: if (mnl_attr_get_payload_len(attr) == sizeof(device->private_key)) { diff --git a/src/tools/set.c b/src/tools/set.c index 7f9374d..b3f57ef 100644 --- a/src/tools/set.c +++ b/src/tools/set.c @@ -26,7 +26,7 @@ int set_main(int argc, char *argv[]) if (!device) goto cleanup; strncpy(device->name, argv[1], IFNAMSIZ - 1); - device->name[IFNAMSIZ - 1] = 0; + device->name[IFNAMSIZ - 1] = '\0'; if (ipc_set_device(device) != 0) { perror("Unable to set device"); diff --git a/src/tools/setconf.c b/src/tools/setconf.c index b5b3cfb..f146a48 100644 --- a/src/tools/setconf.c +++ b/src/tools/setconf.c @@ -48,7 +48,7 @@ int setconf_main(int argc, char *argv[]) goto cleanup; } strncpy(device->name, argv[1], IFNAMSIZ - 1); - device->name[IFNAMSIZ - 1] = 0; + device->name[IFNAMSIZ - 1] = '\0'; if (ipc_set_device(device) != 0) { perror("Unable to set device"); diff --git a/src/tools/show.c b/src/tools/show.c index 0574a78..3fd6a67 100644 --- a/src/tools/show.c +++ b/src/tools/show.c @@ -117,10 +117,11 @@ static char *endpoint(const struct sockaddr *addr) addr_len = sizeof(struct sockaddr_in6); ret = getnameinfo(addr, addr_len, host, sizeof(host), service, sizeof(service), NI_DGRAM | NI_NUMERICSERV | NI_NUMERICHOST); - if (ret) + if (ret) { strncpy(buf, gai_strerror(ret), sizeof(buf) - 1); - else - snprintf(buf, sizeof(buf) - 1, (addr->sa_family == AF_INET6 && strchr(host, ':')) ? "[%s]:%s" : "%s:%s", host, service); + buf[sizeof(buf) - 1] = '\0'; + } else + snprintf(buf, sizeof(buf), (addr->sa_family == AF_INET6 && strchr(host, ':')) ? "[%s]:%s" : "%s:%s", host, service); return buf; } @@ -139,15 +140,15 @@ static size_t pretty_time(char *buf, const size_t len, unsigned long long left) seconds = left % 60; if (years) - offset += snprintf(buf + offset, len - offset - 1, "%s%llu " TERMINAL_FG_CYAN "year%s" TERMINAL_RESET, offset ? ", " : "", years, years == 1 ? "" : "s"); + offset += snprintf(buf + offset, len - offset, "%s%llu " TERMINAL_FG_CYAN "year%s" TERMINAL_RESET, offset ? ", " : "", years, years == 1 ? "" : "s"); if (days) - offset += snprintf(buf + offset, len - offset - 1, "%s%llu " TERMINAL_FG_CYAN "day%s" TERMINAL_RESET, offset ? ", " : "", days, days == 1 ? "" : "s"); + offset += snprintf(buf + offset, len - offset, "%s%llu " TERMINAL_FG_CYAN "day%s" TERMINAL_RESET, offset ? ", " : "", days, days == 1 ? "" : "s"); if (hours) - offset += snprintf(buf + offset, len - offset - 1, "%s%llu " TERMINAL_FG_CYAN "hour%s" TERMINAL_RESET, offset ? ", " : "", hours, hours == 1 ? "" : "s"); + offset += snprintf(buf + offset, len - offset, "%s%llu " TERMINAL_FG_CYAN "hour%s" TERMINAL_RESET, offset ? ", " : "", hours, hours == 1 ? "" : "s"); if (minutes) - offset += snprintf(buf + offset, len - offset - 1, "%s%llu " TERMINAL_FG_CYAN "minute%s" TERMINAL_RESET, offset ? ", " : "", minutes, minutes == 1 ? "" : "s"); + offset += snprintf(buf + offset, len - offset, "%s%llu " TERMINAL_FG_CYAN "minute%s" TERMINAL_RESET, offset ? ", " : "", minutes, minutes == 1 ? "" : "s"); if (seconds) - offset += snprintf(buf + offset, len - offset - 1, "%s%llu " TERMINAL_FG_CYAN "second%s" TERMINAL_RESET, offset ? ", " : "", seconds, seconds == 1 ? "" : "s"); + offset += snprintf(buf + offset, len - offset, "%s%llu " TERMINAL_FG_CYAN "second%s" TERMINAL_RESET, offset ? ", " : "", seconds, seconds == 1 ? "" : "s"); return offset; } @@ -166,6 +167,7 @@ static char *ago(const struct timespec *t) offset = pretty_time(buf, sizeof(buf), now - t->tv_sec); strncpy(buf + offset, " ago", sizeof(buf) - offset - 1); } + buf[sizeof(buf) - 1] = '\0'; return buf; } @@ -183,15 +185,15 @@ static char *bytes(uint64_t b) static char buf[1024]; if (b < 1024ULL) - snprintf(buf, sizeof(buf) - 1, "%u " TERMINAL_FG_CYAN "B" TERMINAL_RESET, (unsigned int)b); + snprintf(buf, sizeof(buf), "%u " TERMINAL_FG_CYAN "B" TERMINAL_RESET, (unsigned int)b); else if (b < 1024ULL * 1024ULL) - snprintf(buf, sizeof(buf) - 1, "%.2f " TERMINAL_FG_CYAN "KiB" TERMINAL_RESET, (double)b / 1024); + snprintf(buf, sizeof(buf), "%.2f " TERMINAL_FG_CYAN "KiB" TERMINAL_RESET, (double)b / 1024); else if (b < 1024ULL * 1024ULL * 1024ULL) - snprintf(buf, sizeof(buf) - 1, "%.2f " TERMINAL_FG_CYAN "MiB" TERMINAL_RESET, (double)b / (1024 * 1024)); + snprintf(buf, sizeof(buf), "%.2f " TERMINAL_FG_CYAN "MiB" TERMINAL_RESET, (double)b / (1024 * 1024)); else if (b < 1024ULL * 1024ULL * 1024ULL * 1024ULL) - snprintf(buf, sizeof(buf) - 1, "%.2f " TERMINAL_FG_CYAN "GiB" TERMINAL_RESET, (double)b / (1024 * 1024 * 1024)); + snprintf(buf, sizeof(buf), "%.2f " TERMINAL_FG_CYAN "GiB" TERMINAL_RESET, (double)b / (1024 * 1024 * 1024)); else - snprintf(buf, sizeof(buf) - 1, "%.2f " TERMINAL_FG_CYAN "TiB" TERMINAL_RESET, (double)b / (1024 * 1024 * 1024) / 1024); + snprintf(buf, sizeof(buf), "%.2f " TERMINAL_FG_CYAN "TiB" TERMINAL_RESET, (double)b / (1024 * 1024 * 1024) / 1024); return buf; } -- cgit v1.2.3-59-g8ed1b