1
0
mirror of git://git.sv.gnu.org/coreutils.git synced 2026-08-01 05:26:20 +02:00

maint: avoid strncat warning on GCC

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
This commit is contained in:
Pádraig Brady
2020-11-07 21:04:12 +00:00
parent ff80b6b0a0
commit 165a80f6e6
+2 -2
View File
@@ -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;
}