From d3bf9f5ced41ad0f4e8ae87e80c7e44df4157b61 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan=20Pokorn=C3=BD?= <jpokorny@redhat.com>
Date: Fri, 13 Jul 2018 14:40:07 +0200
Subject: [PATCH] Refactor: fix "strncpy may miss trailing null byte" warnings
of GCC 8.1
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Verbatim warning:
> ‘strncpy’ specified bound 64 equals destination size [-Wstringop-truncation]
Signed-off-by: Jan Pokorný <jpokorny@redhat.com>
---
src/config.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/src/config.c b/src/config.c
index 9df5767..e4d36ab 100644
--- a/src/config.c
+++ b/src/config.c
@@ -75,7 +75,10 @@ static void hostname_to_ip(char * hostname)
/* Return the first found address */
if (addr_list[0] != NULL) {
- strncpy(hostname, inet_ntoa(*addr_list[0]), BOOTH_NAME_LEN);
+ strncpy(hostname, inet_ntoa(*addr_list[0]), BOOTH_NAME_LEN - 1);
+ /* buffer overflow will not happen (IPv6 notation < 63 chars),
+ but suppress the warnings */
+ hostname[BOOTH_NAME_LEN - 1] = '\0';
}
else {
log_error("no IP addresses found for the host \"%s\"", hostname);
@@ -106,7 +109,12 @@ static int add_site(char *addr_string, int type)
site->family = AF_INET;
site->type = type;
- strncpy(site->addr_string, addr_string, sizeof(site->addr_string));
+ /* buffer overflow will not hapen (we've already checked that
+ addr_string will fit incl. terminating '\0' above), but
+ suppress the warnings with copying everything but the boundary
+ byte, which is valid as-is, since this last byte will be safely
+ pre-zeroed from the struct booth_config initialization */
+ strncpy(site->addr_string, addr_string, sizeof(site->addr_string) - 1);
if (!(inet_pton(AF_INET, site->addr_string, &site->sa4.sin_addr) > 0) &&
!(inet_pton(AF_INET6, site->addr_string, &site->sa6.sin6_addr) > 0)) {
--
2.18.0.rc2