diff options
author | Pádraig Brady <P@draigBrady.com> | 2020-11-07 21:04:12 +0000 |
---|---|---|
committer | Pádraig Brady <P@draigBrady.com> | 2020-11-07 21:34:34 +0000 |
commit | 165a80f6e6f613d2443f19c87f9511ce2cf9818c (patch) | |
tree | 2cacaf6643c2d66aff1036079266d70178845ac5 | |
parent | ff80b6b0a0507e24f39cc1aad09d147f5187430b (diff) |
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
-rw-r--r-- | src/who.c | 4 |
1 files changed, 2 insertions, 2 deletions
@@ -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; } |