[PATCH 3/3] string: Fix tester with fortify enabled

Carlos O'Donell carlos@redhat.com
Mon Jul 24 12:38:44 GMT 2023


On 7/21/23 08:18, Adhemerval Zanella via Libc-alpha wrote:
> If fortify is enabled, the truncated output warning is issued by
> the wrapper itself:
> 
> In function ‘strncpy’,
>     inlined from ‘test_strncpy’ at tester.c:505:10:
> ../string/bits/string_fortified.h:95:10: error: ‘__builtin_strncpy’
> destination unchanged after copying no bytes from a string of length 3
> [-Werror=stringop-truncation]
>    95 |   return __builtin___strncpy_chk (__dest, __src, __len,
>       |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    96 |                                   __glibc_objsize (__dest));
>       |                                   ~~~~~~~~~~~~~~~~~~~~~~~~~
> In file included from ../include/bits/string_fortified.h:1,
>                  from ../string/string.h:548,
>                  from ../include/string.h:60,
>                  from tester.c:33,
>                  from inl-tester.c:6:
> In function ‘strncpy’,
>     inlined from ‘test_strncpy’ at tester.c:505:10:
> 
> Checked on x86_64-linux-gnu.

LGTM.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>

> ---
>  string/tester.c | 12 ++++++++----
>  1 file changed, 8 insertions(+), 4 deletions(-)
> 
> diff --git a/string/tester.c b/string/tester.c
> index 8de70ad3ce..da42c72141 100644
> --- a/string/tester.c
> +++ b/string/tester.c
> @@ -26,6 +26,14 @@
>  #undef __USE_STRING_INLINES
>  #endif
>  
> +#include <sys/cdefs.h>
> +#include <libc-diag.h>
> +
> +/* Triggered by strncpy fortify wrapper when it is enabled.  */

OK. Comment and disable.

> +#if __GNUC_PREREQ (8, 0)

OK. GCC 8 is the latest version at which the behaviour starts (noted in your cover letter).

> +DIAG_IGNORE_NEEDS_COMMENT (8, "-Wstringop-truncation");
> +#endif
> +
>  #include <errno.h>
>  #include <stdint.h>
>  #include <stdio.h>
> @@ -33,7 +41,6 @@
>  #include <string.h>
>  #include <strings.h>
>  #include <fcntl.h>
> -#include <libc-diag.h>
>  
>  /* This file tests a range of corner cases of string functions,
>     including cases where truncation occurs or where sizes specified
> @@ -45,9 +52,6 @@ DIAG_IGNORE_NEEDS_COMMENT (5.0, "-Wmemset-transposed-args");
>  DIAG_IGNORE_NEEDS_COMMENT (9, "-Wrestrict");
>  DIAG_IGNORE_NEEDS_COMMENT (7, "-Wstringop-overflow=");
>  #endif
> -#if __GNUC_PREREQ (8, 0)
> -DIAG_IGNORE_NEEDS_COMMENT (8, "-Wstringop-truncation");
> -#endif

OK.

>  #if __GNUC_PREREQ (11, 0)
>  DIAG_IGNORE_NEEDS_COMMENT (11, "-Wstringop-overread");
>  #endif

-- 
Cheers,
Carlos.



More information about the Libc-alpha mailing list