| commit 7163ace3318d666d40771f5c8e7c4a148827070f |
| Author: Siddhesh Poyarekar <siddhesh@sourceware.org> |
| Date: Thu Nov 12 12:09:56 2020 +0530 |
| |
| Use __builtin___stpncpy_chk when available |
| |
| The builtin has been available in gcc since 4.7.0 and in clang since |
| 2.6. This fixes stpncpy fortification with clang since it does a |
| better job of plugging in __stpncpy_chk in the right place than the |
| header hackery. |
| |
| This has been tested by building and running all tests with gcc 10.2.1 |
| and also with clang tip as of a few days ago (just the tests in debug/ |
| since running all tests don't work with clang at the moment) to make |
| sure that both compilers pass the stpncpy tests. |
| |
| diff --git a/string/bits/string_fortified.h b/string/bits/string_fortified.h |
| index a07ab0dbc8c8dd5b..4ed6755a6c1ca247 100644 |
| |
| |
| @@ -106,7 +106,13 @@ __NTH (strncpy (char *__restrict __dest, const char *__restrict __src, |
| return __builtin___strncpy_chk (__dest, __src, __len, __bos (__dest)); |
| } |
| |
| -/* XXX We have no corresponding builtin yet. */ |
| +#if __GNUC_PREREQ (4, 7) || __glibc_clang_prereq (2, 6) |
| +__fortify_function char * |
| +__NTH (stpncpy (char *__dest, const char *__src, size_t __n)) |
| +{ |
| + return __builtin___stpncpy_chk (__dest, __src, __n, __bos (__dest)); |
| +} |
| +#else |
| extern char *__stpncpy_chk (char *__dest, const char *__src, size_t __n, |
| size_t __destlen) __THROW; |
| extern char *__REDIRECT_NTH (__stpncpy_alias, (char *__dest, const char *__src, |
| @@ -120,6 +126,7 @@ __NTH (stpncpy (char *__dest, const char *__src, size_t __n)) |
| return __stpncpy_chk (__dest, __src, __n, __bos (__dest)); |
| return __stpncpy_alias (__dest, __src, __n); |
| } |
| +#endif |
| |
| |
| __fortify_function char * |