GCC 8.x introduced -Wstringop-truncation to help detecting likely
unwanted outcomes of strncpy(dst, src, n), such as omitting the NUL
character into the destination buffer whenever n < sizeof(src).

Fix unsafe strncpy() calls when we do expect a null-terminated
destination buffer.
---
 utils/can/rtcanconfig.c | 7 ++++---
 utils/can/rtcanrecv.c   | 3 ++-
 utils/can/rtcansend.c   | 3 ++-
 3 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/utils/can/rtcanconfig.c b/utils/can/rtcanconfig.c
index a285ec73d..395e0368d 100644
--- a/utils/can/rtcanconfig.c
+++ b/utils/can/rtcanconfig.c
@@ -31,6 +31,7 @@
 #include <errno.h>
 #include <getopt.h>
 #include <sys/mman.h>
+#include <boilerplate/ancillaries.h>
 
 #include <rtdm/can.h>
 
@@ -81,7 +82,7 @@ static int string_to_ctrlmode(char *str)
 
 int main(int argc, char *argv[])
 {
-    char    ifname[16];
+    char    ifname[IFNAMSIZ];
     int     can_fd = -1;
     int     new_baudrate = -1;
     int     new_mode = -1;
@@ -159,8 +160,8 @@ int main(int argc, char *argv[])
        return 0;
     }
 
-    strncpy(ifname, argv[optind], IFNAMSIZ);
-    strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
+    namecpy(ifname, argv[optind]);
+    namecpy(ifr.ifr_name, ifname);
 
     if (optind == argc - 2) {   /* Get mode setting */
        new_mode = string_to_mode(argv[optind + 1]);
diff --git a/utils/can/rtcanrecv.c b/utils/can/rtcanrecv.c
index 8155ab76d..71e68cc5c 100644
--- a/utils/can/rtcanrecv.c
+++ b/utils/can/rtcanrecv.c
@@ -7,6 +7,7 @@
 #include <getopt.h>
 
 #include <alchemy/task.h>
+#include <boilerplate/ancillaries.h>
 
 #include <rtdm/can.h>
 
@@ -248,7 +249,7 @@ int main(int argc, char **argv)
        if (verbose)
            printf("interface %s\n", argv[optind]);
 
-       strncpy(ifr.ifr_name, argv[optind], IFNAMSIZ);
+       namecpy(ifr.ifr_name, argv[optind]);
        if (verbose)
            printf("s=%d, ifr_name=%s\n", s, ifr.ifr_name);
 
diff --git a/utils/can/rtcansend.c b/utils/can/rtcansend.c
index 4a692b3bf..bfa3054c2 100644
--- a/utils/can/rtcansend.c
+++ b/utils/can/rtcansend.c
@@ -6,6 +6,7 @@
 #include <errno.h>
 #include <getopt.h>
 
+#include <boilerplate/ancillaries.h>
 #include <alchemy/task.h>
 #include <alchemy/timer.h>
 
@@ -231,7 +232,7 @@ int main(int argc, char **argv)
            printf("Using loopback=%d\n", loopback);
     }
 
-    strncpy(ifr.ifr_name, argv[optind], IFNAMSIZ);
+    namecpy(ifr.ifr_name, argv[optind]);
     if (verbose)
        printf("s=%d, ifr_name=%s\n", s, ifr.ifr_name);
 
-- 
2.17.2


Reply via email to