LCOV - code coverage report
Current view: top level - /usr/include/x86_64-linux-gnu/bits - string_fortified.h Coverage Total Hit
Test: coverage.info Lines: 100.0 % 2 2
Test Date: 2026-11-11 22:04:34 Functions: - 0 0

            Line data    Source code
       1              : /* Copyright (C) 2004-2026 Free Software Foundation, Inc.
       2              :    This file is part of the GNU C Library.
       3              : 
       4              :    The GNU C Library is free software; you can redistribute it and/or
       5              :    modify it under the terms of the GNU Lesser General Public
       6              :    License as published by the Free Software Foundation; either
       7              :    version 2.1 of the License, or (at your option) any later version.
       8              : 
       9              :    The GNU C Library is distributed in the hope that it will be useful,
      10              :    but WITHOUT ANY WARRANTY; without even the implied warranty of
      11              :    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12              :    Lesser General Public License for more details.
      13              : 
      14              :    You should have received a copy of the GNU Lesser General Public
      15              :    License along with the GNU C Library; if not, see
      16              :    <https://www.gnu.org/licenses/>.  */
      17              : 
      18              : #ifndef _BITS_STRING_FORTIFIED_H
      19              : #define _BITS_STRING_FORTIFIED_H 1
      20              : 
      21              : #ifndef _STRING_H
      22              : # error "Never use <bits/string_fortified.h> directly; include <string.h> instead."
      23              : #endif
      24              : 
      25              : __fortify_function void *
      26              : __NTH (memcpy (void *__restrict __dest, const void *__restrict __src,
      27              :                size_t __len))
      28              : {
      29              :   return __builtin___memcpy_chk (__dest, __src, __len,
      30              :                                  __glibc_objsize0 (__dest));
      31              : }
      32              : 
      33              : __fortify_function void *
      34              : __NTH (memmove (void *__dest, const void *__src, size_t __len))
      35              : {
      36              :   return __builtin___memmove_chk (__dest, __src, __len,
      37              :                                   __glibc_objsize0 (__dest));
      38              : }
      39              : 
      40              : #ifdef __USE_GNU
      41              : __fortify_function void *
      42              : __NTH (mempcpy (void *__restrict __dest, const void *__restrict __src,
      43              :                 size_t __len))
      44              : {
      45              :   return __builtin___mempcpy_chk (__dest, __src, __len,
      46              :                                   __glibc_objsize0 (__dest));
      47              : }
      48              : #endif
      49              : 
      50              : 
      51              : /* The first two tests here help to catch a somewhat common problem
      52              :    where the second and third parameter are transposed.  This is
      53              :    especially problematic if the intended fill value is zero.  In this
      54              :    case no work is done at all.  We detect these problems by referring
      55              :    non-existing functions.  */
      56              : __fortify_function void *
      57              : __NTH (memset (void *__dest, int __ch, size_t __len))
      58              : {
      59              :   return __builtin___memset_chk (__dest, __ch, __len,
      60              :                                  __glibc_objsize0 (__dest));
      61              : }
      62              : 
      63              : #if defined __USE_MISC || __GLIBC_USE (ISOC23)
      64              : void *__memset_explicit_chk (void *__s, int __c, size_t __n, size_t __destlen)
      65              :      __THROW __nonnull ((1)) __fortified_attr_access (__write_only__, 1, 3);
      66              : 
      67              : __fortify_function void *
      68              : __NTH (memset_explicit (void *__dest, int __ch, size_t __len))
      69              : {
      70              :   return __memset_explicit_chk (__dest, __ch, __len,
      71              :                                 __glibc_objsize0 (__dest));
      72              : }
      73              : #endif
      74              : 
      75              : #ifdef __USE_MISC
      76              : # include <bits/strings_fortified.h>
      77              : 
      78              : void __explicit_bzero_chk (void *__dest, size_t __len, size_t __destlen)
      79              :   __THROW __nonnull ((1)) __fortified_attr_access (__write_only__, 1, 2);
      80              : 
      81              : __fortify_function void
      82              : __NTH (explicit_bzero (void *__dest, size_t __len))
      83              : {
      84              :   __explicit_bzero_chk (__dest, __len, __glibc_objsize0 (__dest));
      85              : }
      86              : #endif
      87              : 
      88              : __fortify_function __attribute_overloadable__ char *
      89           21 : __NTH (strcpy (__fortify_clang_overload_arg (char *, __restrict, __dest),
      90              :                const char *__restrict __src))
      91              :      __fortify_clang_warn_if_src_too_large (__dest, __src)
      92              : {
      93           21 :   return __builtin___strcpy_chk (__dest, __src, __glibc_objsize (__dest));
      94              : }
      95              : 
      96              : #ifdef __USE_XOPEN2K8
      97              : __fortify_function __attribute_overloadable__ char *
      98              : __NTH (stpcpy (__fortify_clang_overload_arg (char *, __restrict, __dest),
      99              :                const char *__restrict __src))
     100              :      __fortify_clang_warn_if_src_too_large (__dest, __src)
     101              : {
     102              :   return __builtin___stpcpy_chk (__dest, __src, __glibc_objsize (__dest));
     103              : }
     104              : #endif
     105              : 
     106              : 
     107              : __fortify_function __attribute_overloadable__ char *
     108              : __NTH (strncpy (__fortify_clang_overload_arg (char *, __restrict, __dest),
     109              :                 const char *__restrict __src, size_t __len))
     110              :      __fortify_clang_warn_if_dest_too_small (__dest, __len)
     111              : {
     112              :   return __builtin___strncpy_chk (__dest, __src, __len,
     113              :                                   __glibc_objsize (__dest));
     114              : }
     115              : 
     116              : #ifdef __USE_XOPEN2K8
     117              : # if __GNUC_PREREQ (4, 7) || __glibc_clang_prereq (2, 6)
     118              : __fortify_function __attribute_overloadable__ char *
     119              : __NTH (stpncpy (__fortify_clang_overload_arg (char *, ,__dest),
     120              :                 const char *__src, size_t __n))
     121              :      __fortify_clang_warn_if_dest_too_small (__dest, __n)
     122              : {
     123              :   return __builtin___stpncpy_chk (__dest, __src, __n,
     124              :                                   __glibc_objsize (__dest));
     125              : }
     126              : # else
     127              : extern char *__stpncpy_chk (char *__dest, const char *__src, size_t __n,
     128              :                             size_t __destlen) __THROW
     129              :   __fortified_attr_access (__write_only__, 1, 3)
     130              :   __attr_access ((__read_only__, 2));
     131              : extern char *__REDIRECT_NTH (__stpncpy_alias, (char *__dest, const char *__src,
     132              :                                                size_t __n), stpncpy);
     133              : 
     134              : __fortify_function __attribute_overloadable__ char *
     135              : __NTH (stpncpy (__fortify_clang_overload_arg (char *, ,__dest),
     136              :                 const char *__src, size_t __n))
     137              : {
     138              :   if (__bos (__dest) != (size_t) -1
     139              :       && (!__builtin_constant_p (__n) || __n > __bos (__dest)))
     140              :     return __stpncpy_chk (__dest, __src, __n, __bos (__dest));
     141              :   return __stpncpy_alias (__dest, __src, __n);
     142              : }
     143              : # endif
     144              : #endif
     145              : 
     146              : 
     147              : __fortify_function __attribute_overloadable__ char *
     148              : __NTH (strcat (__fortify_clang_overload_arg (char *, __restrict, __dest),
     149              :                const char *__restrict __src))
     150              :      __fortify_clang_warn_if_src_too_large (__dest, __src)
     151              : {
     152              :   return __builtin___strcat_chk (__dest, __src, __glibc_objsize (__dest));
     153              : }
     154              : 
     155              : 
     156              : __fortify_function __attribute_overloadable__ char *
     157              : __NTH (strncat (__fortify_clang_overload_arg (char *, __restrict, __dest),
     158              :                 const char *__restrict __src, size_t __len))
     159              :      __fortify_clang_warn_if_src_too_large (__dest, __src)
     160              : {
     161              :   return __builtin___strncat_chk (__dest, __src, __len,
     162              :                                   __glibc_objsize (__dest));
     163              : }
     164              : 
     165              : #ifdef __USE_MISC
     166              : extern size_t __strlcpy_chk (char *__dest, const char *__src, size_t __n,
     167              :                              size_t __destlen) __THROW;
     168              : extern size_t __REDIRECT_NTH (__strlcpy_alias,
     169              :                               (char *__dest, const char *__src, size_t __n),
     170              :                               strlcpy);
     171              : 
     172              : __fortify_function __attribute_overloadable__ size_t
     173              : __NTH (strlcpy (__fortify_clang_overload_arg (char *, __restrict, __dest),
     174              :                 const char *__restrict __src, size_t __n))
     175              :      __fortify_clang_warn_if_dest_too_small (__dest, __n)
     176              : {
     177              :   if (__glibc_objsize (__dest) != (size_t) -1
     178              :       && (!__builtin_constant_p (__n > __glibc_objsize (__dest))
     179              :           || __n > __glibc_objsize (__dest)))
     180              :     return __strlcpy_chk (__dest, __src, __n, __glibc_objsize (__dest));
     181              :   return __strlcpy_alias (__dest, __src, __n);
     182              : }
     183              : 
     184              : extern size_t __strlcat_chk (char *__dest, const char *__src, size_t __n,
     185              :                              size_t __destlen) __THROW;
     186              : extern size_t __REDIRECT_NTH (__strlcat_alias,
     187              :                               (char *__dest, const char *__src, size_t __n),
     188              :                               strlcat);
     189              : 
     190              : __fortify_function __attribute_overloadable__ size_t
     191              : __NTH (strlcat (__fortify_clang_overload_arg (char *, __restrict, __dest),
     192              :                 const char *__restrict __src, size_t __n))
     193              : {
     194              :   if (__glibc_objsize (__dest) != (size_t) -1
     195              :       && (!__builtin_constant_p (__n > __glibc_objsize (__dest))
     196              :           || __n > __glibc_objsize (__dest)))
     197              :     return __strlcat_chk (__dest, __src, __n, __glibc_objsize (__dest));
     198              :   return __strlcat_alias (__dest, __src, __n);
     199              : }
     200              : #endif /* __USE_MISC */
     201              : 
     202              : #endif /* bits/string_fortified.h */
        

Generated by: LCOV version 2.0-1