From 165a80f6e6f613d2443f19c87f9511ce2cf9818c Mon Sep 17 00:00:00 2001 From: =?utf8?q?P=C3=A1draig=20Brady?=
Date: Sat, 7 Nov 2020 21:04:12 +0000 Subject: [PATCH] maint: avoid strncat warning on GCC MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit GCC 10.1.1 without optimization gives: error: âstrncatâ argument 2 declared attribute ânonstringâ [-Werror=stringop-overflow=] strncat (comment, UT_ID (utmp_ent), utmpsize); Note the strncat man page says that: "src does not need to be null-terminated if it contains n or more bytes." And the POSIX spec says that the second (source) parameter is an array not a string. So I think it's incorrect for strncat to require src be a string type. This constraint seems to be being added to the gcc builtin strncat, as specifiying -fno-builtin also avoids the warning. Note specifying any optimization level also avoids the warning. * src/who.c (make_id_equals_comment): Avoid the issue by using stpcpy + stzncpy, instead of strcpy + strncat. This pattern is used elsewhere in who.c --- src/who.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/who.c b/src/who.c index abf3bc734a..a039272472 100644 --- a/src/who.c +++ b/src/who.c @@ -450,8 +450,8 @@ make_id_equals_comment (STRUCT_UTMP const *utmp_ent) size_t utmpsize = sizeof UT_ID (utmp_ent); char *comment = xmalloc (strlen (_("id=")) + utmpsize + 1); - strcpy (comment, _("id=")); - strncat (comment, UT_ID (utmp_ent), utmpsize); + char *p = stpcpy (comment, _("id=")); + stzncpy (p, UT_ID (utmp_ent), utmpsize); return comment; } -- 2.47.2