summaryrefslogtreecommitdiff
path: root/misc
diff options
context:
space:
mode:
authorMartin Sebor <msebor@redhat.com>2017-11-15 17:39:59 -0700
committerMartin Sebor <msebor@redhat.com>2017-11-15 17:39:59 -0700
commit7532837d7b03b3ca5b9a63d77a5bd81dd23f3d9c (patch)
treec6c0117b6959160bc128ee661b3ed08420177c5e /misc
parentd9611e308592355718b36fe085b7b61aa52911e5 (diff)
The -Wstringop-truncation option new in GCC 8 detects common misuses
of the strncat and strncpy function that may result in truncating the copied string before the terminating NUL. To avoid false positive warnings for correct code that intentionally creates sequences of characters that aren't guaranteed to be NUL-terminated, arrays that are intended to store such sequences should be decorated with a new nonstring attribute. This change add this attribute to Glibc and uses it to suppress such false positives. ChangeLog: * misc/sys/cdefs.h (__attribute_nonstring__): New macro. * sysdeps/gnu/bits/utmp.h (struct utmp): Use it. * sysdeps/unix/sysv/linux/s390/bits/utmp.h (struct utmp): Same.
Diffstat (limited to 'misc')
-rw-r--r--misc/sys/cdefs.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h
index cfd39d5302..a603cb9df0 100644
--- a/misc/sys/cdefs.h
+++ b/misc/sys/cdefs.h
@@ -407,6 +407,15 @@
# endif
#endif
+#if __GNUC_PREREQ (8, 0)
+/* Describes a char array whose address can safely be passed as the first
+ argument to strncpy and strncat, as the char array is not necessarily
+ a NUL-terminated string. */
+# define __attribute_nonstring__ __attribute__ ((__nonstring__))
+#else
+# define __attribute_nonstring__
+#endif
+
#if (!defined _Static_assert && !defined __cplusplus \
&& (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \
&& (!__GNUC_PREREQ (4, 6) || defined __STRICT_ANSI__))