1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-30 22:43:12 +03:00

Implement strlcpy and strlcat [BZ #178]

These functions are about to be added to POSIX, under Austin Group
issue 986.

The fortified strlcat implementation does not raise SIGABRT if the
destination buffer does not contain a null terminator, it just
inherits the non-failing regular strlcat behavior.

Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
This commit is contained in:
Florian Weimer
2023-06-14 18:10:08 +02:00
parent 7ba426a111
commit 454a20c875
50 changed files with 560 additions and 0 deletions

3
NEWS
View File

@ -35,6 +35,9 @@ Major new features:
The symbol names follow the AArch64 vector ABI, they are declared The symbol names follow the AArch64 vector ABI, they are declared
in math.h and have to be called manually at this point. in math.h and have to be called manually at this point.
* The strlcpy and strlcat functions have been added. They are derived
from OpenBSD, and are expected to be added to a future POSIX version.
Deprecated and removed features, and other changes affecting compatibility: Deprecated and removed features, and other changes affecting compatibility:
* In the Linux kernel for the hppa/parisc architecture some of the * In the Linux kernel for the hppa/parisc architecture some of the

View File

@ -84,6 +84,8 @@ routines = \
stpncpy_chk \ stpncpy_chk \
strcat_chk \ strcat_chk \
strcpy_chk \ strcpy_chk \
strlcat_chk \
strlcpy_chk \
strncat_chk \ strncat_chk \
strncpy_chk \ strncpy_chk \
swprintf_chk \ swprintf_chk \

View File

@ -58,6 +58,10 @@ libc {
GLIBC_2.25 { GLIBC_2.25 {
__explicit_bzero_chk; __explicit_bzero_chk;
} }
GLIBC_2.38 {
__strlcat_chk;
__strlcpy_chk;
}
GLIBC_PRIVATE { GLIBC_PRIVATE {
__fortify_fail; __fortify_fail;
} }

31
debug/strlcat_chk.c Normal file
View File

@ -0,0 +1,31 @@
/* Fortified version of strlcat.
Copyright (C) 2023 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#include <string.h>
/* Check that the user-supplied size does not exceed the
compiler-determined size, and then forward to strlcat. */
size_t
__strlcat_chk (char *__restrict s1, const char *__restrict s2,
size_t n, size_t s1len)
{
if (__glibc_unlikely (s1len < n))
__chk_fail ();
return __strlcat (s1, s2, n);
}

31
debug/strlcpy_chk.c Normal file
View File

@ -0,0 +1,31 @@
/* Fortified version of strlcpy.
Copyright (C) 2023 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#include <string.h>
/* Check that the user-supplied size does not exceed the
compiler-determined size, and then forward to strlcpy. */
size_t
__strlcpy_chk (char *__restrict s1, const char *__restrict s2,
size_t n, size_t s1len)
{
if (__glibc_unlikely (s1len < n))
__chk_fail ();
return __strlcpy (s1, s2, n);
}

View File

@ -535,6 +535,20 @@ do_test (void)
strncpy (a.buf1 + (O + 6), "X", l0 + 4); strncpy (a.buf1 + (O + 6), "X", l0 + 4);
CHK_FAIL_END CHK_FAIL_END
CHK_FAIL_START
strlcpy (a.buf1 + (O + 6), "X", 4);
CHK_FAIL_END
CHK_FAIL_START
strlcpy (a.buf1 + (O + 6), "X", l0 + 4);
CHK_FAIL_END
{
char *volatile buf2 = buf;
if (strlcpy (buf2, "a", sizeof (buf) + 1) != 1)
FAIL ();
}
# if !defined __cplusplus || defined __va_arg_pack # if !defined __cplusplus || defined __va_arg_pack
CHK_FAIL_START CHK_FAIL_START
sprintf (a.buf1 + (O + 7), "%d", num1); sprintf (a.buf1 + (O + 7), "%d", num1);
@ -558,6 +572,23 @@ do_test (void)
CHK_FAIL_START CHK_FAIL_START
strncat (a.buf1, "ZYXWV", l0 + 3); strncat (a.buf1, "ZYXWV", l0 + 3);
CHK_FAIL_END CHK_FAIL_END
memset (a.buf1, 0, sizeof (a.buf1));
CHK_FAIL_START
strlcat (a.buf1 + (O + 6), "X", 4);
CHK_FAIL_END
memset (a.buf1, 0, sizeof (a.buf1));
CHK_FAIL_START
strlcat (a.buf1 + (O + 6), "X", l0 + 4);
CHK_FAIL_END
{
buf[0] = '\0';
char *volatile buf2 = buf;
if (strlcat (buf2, "a", sizeof (buf) + 1) != 1)
FAIL ();
}
#endif #endif

View File

@ -88,6 +88,10 @@ libc_hidden_proto (__stpcpy)
# define __stpcpy(dest, src) __builtin_stpcpy (dest, src) # define __stpcpy(dest, src) __builtin_stpcpy (dest, src)
#endif #endif
libc_hidden_proto (__stpncpy) libc_hidden_proto (__stpncpy)
extern __typeof (strlcpy) __strlcpy;
libc_hidden_proto (__strlcpy)
extern __typeof (strlcat) __strlcat;
libc_hidden_proto (__strlcat)
libc_hidden_proto (__rawmemchr) libc_hidden_proto (__rawmemchr)
libc_hidden_proto (__strcasecmp) libc_hidden_proto (__strcasecmp)
libc_hidden_proto (__strcasecmp_l) libc_hidden_proto (__strcasecmp_l)

View File

@ -92,6 +92,8 @@ routines := \
strerrorname_np \ strerrorname_np \
strfry \ strfry \
string-inlines \ string-inlines \
strlcat \
strlcpy \
strlen \ strlen \
strncase \ strncase \
strncase_l \ strncase_l \
@ -177,6 +179,8 @@ tests := \
tst-inlcall \ tst-inlcall \
tst-memmove-overflow \ tst-memmove-overflow \
tst-strfry \ tst-strfry \
tst-strlcat \
tst-strlcpy \
tst-strlen \ tst-strlen \
tst-strtok \ tst-strtok \
tst-strtok_r \ tst-strtok_r \

View File

@ -92,4 +92,8 @@ libc {
GLIBC_2.35 { GLIBC_2.35 {
__memcmpeq; __memcmpeq;
} }
GLIBC_2.38 {
strlcat;
strlcpy;
}
} }

View File

@ -139,4 +139,40 @@ __NTH (strncat (char *__restrict __dest, const char *__restrict __src,
__glibc_objsize (__dest)); __glibc_objsize (__dest));
} }
#ifdef __USE_MISC
extern size_t __strlcpy_chk (char *__dest, const char *__src, size_t __n,
size_t __destlen) __THROW;
extern size_t __REDIRECT_NTH (__strlcpy_alias,
(char *__dest, const char *__src, size_t __n),
strlcpy);
__fortify_function size_t
__NTH (strlcpy (char *__restrict __dest, const char *__restrict __src,
size_t __n))
{
if (__glibc_objsize (__dest) != (size_t) -1
&& (!__builtin_constant_p (__n > __glibc_objsize (__dest))
|| __n > __glibc_objsize (__dest)))
return __strlcpy_chk (__dest, __src, __n, __glibc_objsize (__dest));
return __strlcpy_alias (__dest, __src, __n);
}
extern size_t __strlcat_chk (char *__dest, const char *__src, size_t __n,
size_t __destlen) __THROW;
extern size_t __REDIRECT_NTH (__strlcat_alias,
(char *__dest, const char *__src, size_t __n),
strlcat);
__fortify_function size_t
__NTH (strlcat (char *__restrict __dest, const char *__restrict __src,
size_t __n))
{
if (__glibc_objsize (__dest) != (size_t) -1
&& (!__builtin_constant_p (__n > __glibc_objsize (__dest))
|| __n > __glibc_objsize (__dest)))
return __strlcat_chk (__dest, __src, __n, __glibc_objsize (__dest));
return __strlcat_alias (__dest, __src, __n);
}
#endif /* __USE_MISC */
#endif /* bits/string_fortified.h */ #endif /* bits/string_fortified.h */

View File

@ -501,6 +501,19 @@ extern char *stpncpy (char *__restrict __dest,
__THROW __nonnull ((1, 2)); __THROW __nonnull ((1, 2));
#endif #endif
#ifdef __USE_MISC
/* Copy at most N - 1 characters from SRC to DEST. */
extern size_t strlcpy (char *__restrict __dest,
const char *__restrict __src, size_t __n)
__THROW __nonnull ((1, 2)) __attr_access ((__write_only__, 1, 3));
/* Append SRC to DEST, possibly with truncation to keep the total size
below N. */
extern size_t strlcat (char *__restrict __dest,
const char *__restrict __src, size_t __n)
__THROW __nonnull ((1, 2)) __attr_access ((__read_write__, 1, 3));
#endif
#ifdef __USE_GNU #ifdef __USE_GNU
/* Compare S1 and S2 as strings holding name & indices/version numbers. */ /* Compare S1 and S2 as strings holding name & indices/version numbers. */
extern int strverscmp (const char *__s1, const char *__s2) extern int strverscmp (const char *__s1, const char *__s2)

59
string/strlcat.c Normal file
View File

@ -0,0 +1,59 @@
/* Append a null-terminated string to another string, with length checking.
Copyright (C) 2023 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#include <stdint.h>
#include <string.h>
size_t
__strlcat (char *__restrict dest, const char *__restrict src, size_t size)
{
size_t src_length = strlen (src);
/* Our implementation strlcat supports dest == NULL if size == 0
(for consistency with snprintf and strlcpy), but strnlen does
not, so we have to cover this case explicitly. */
if (size == 0)
return src_length;
size_t dest_length = __strnlen (dest, size);
if (dest_length != size)
{
/* Copy at most the remaining number of characters in the
destination buffer. Leave for the NUL terminator. */
size_t to_copy = size - dest_length - 1;
/* But not more than what is available in the source string. */
if (to_copy > src_length)
to_copy = src_length;
char *target = dest + dest_length;
memcpy (target, src, to_copy);
target[to_copy] = '\0';
}
/* If the sum wraps around, we have more than SIZE_MAX + 2 bytes in
the two input strings (including both null terminators). If each
byte in the address space can be assigned a unique size_t value
(which the static_assert checks), then by the pigeonhole
principle, the two input strings must overlap, which is
undefined. */
_Static_assert (sizeof (uintptr_t) == sizeof (size_t),
"theoretical maximum object size covers address space");
return dest_length + src_length;
}
libc_hidden_def (__strlcat)
weak_alias (__strlcat, strlcat)

46
string/strlcpy.c Normal file
View File

@ -0,0 +1,46 @@
/* Copy a null-terminated string to a fixed-size buffer, with length checking.
Copyright (C) 2023 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#include <string.h>
size_t
__strlcpy (char *__restrict dest, const char *__restrict src, size_t size)
{
size_t src_length = strlen (src);
if (__glibc_unlikely (src_length >= size))
{
if (size > 0)
{
/* Copy the leading portion of the string. The last
character is subsequently overwritten with the NUL
terminator, but the destination size is usually a
multiple of a small power of two, so writing it twice
should be more efficient than copying an odd number of
bytes. */
memcpy (dest, src, size);
dest[size - 1] = '\0';
}
}
else
/* Copy the string and its terminating NUL character. */
memcpy (dest, src, src_length + 1);
return src_length;
}
libc_hidden_def (__strlcpy)
weak_alias (__strlcpy, strlcpy)

84
string/tst-strlcat.c Normal file
View File

@ -0,0 +1,84 @@
/* Test the strlcat function.
Copyright (C) 2023 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <support/check.h>
static int
do_test (void)
{
struct {
char buf1[16];
char buf2[16];
} s;
/* Nothing is written to the destination if its size is 0. */
memset (&s, '@', sizeof (s));
TEST_COMPARE (strlcat (s.buf1, "", 0), 0);
TEST_COMPARE_BLOB (&s, sizeof (s), "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", 32);
TEST_COMPARE (strlcat (s.buf1, "Hello!", 0), 6);
TEST_COMPARE_BLOB (&s, sizeof (s), "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", 32);
/* No bytes are are modified in the target buffer if the source
string is short enough. */
memset (&s, '@', sizeof (s));
strcpy (s.buf1, "He");
TEST_COMPARE (strlcat (s.buf1, "llo!", sizeof (s.buf1)), 6);
TEST_COMPARE_BLOB (&s, sizeof (s), "Hello!\0@@@@@@@@@@@@@@@@@@@@@@@@@", 32);
/* A source string which fits exactly into the destination buffer is
not truncated. */
memset (&s, '@', sizeof (s));
strcpy (s.buf1, "H");
TEST_COMPARE (strlcat (s.buf1, "ello, world!!!", sizeof (s.buf1)), 15);
TEST_COMPARE_BLOB (&s, sizeof (s),
"Hello, world!!!\0@@@@@@@@@@@@@@@@@@@@@@@@@", 32);
/* A source string one character longer than the destination buffer
is truncated by one character. The total length is returned. */
memset (&s, '@', sizeof (s));
strcpy (s.buf1, "Hello");
TEST_COMPARE (strlcat (s.buf1, ", world!!!!", sizeof (s.buf1)), 16);
TEST_COMPARE_BLOB (&s, sizeof (s),
"Hello, world!!!\0@@@@@@@@@@@@@@@@@@@@@@@@@", 32);
/* An even longer source string is truncated as well, and the total
length is returned. */
memset (&s, '@', sizeof (s));
strcpy (s.buf1, "Hello,");
TEST_COMPARE (strlcat (s.buf1, " world!!!!!!!!", sizeof (s.buf1)), 20);
TEST_COMPARE_BLOB (&s, sizeof (s),
"Hello, world!!!\0@@@@@@@@@@@@@@@@@@@@@@@@@", 32);
/* A destination string which is not NUL-terminated does not result
in any changes to the buffer. */
memset (&s, '@', sizeof (s));
memset (s.buf1, '$', sizeof (s.buf1));
TEST_COMPARE (strlcat (s.buf1, "", sizeof (s.buf1)), 16);
TEST_COMPARE_BLOB (&s, sizeof (s), "$$$$$$$$$$$$$$$$@@@@@@@@@@@@@@@@", 32);
TEST_COMPARE (strlcat (s.buf1, "Hello!", sizeof (s.buf1)), 22);
TEST_COMPARE_BLOB (&s, sizeof (s), "$$$$$$$$$$$$$$$$@@@@@@@@@@@@@@@@", 32);
TEST_COMPARE (strlcat (s.buf1, "Hello, world!!!!!!!!", sizeof (s.buf1)), 36);
TEST_COMPARE_BLOB (&s, sizeof (s), "$$$$$$$$$$$$$$$$@@@@@@@@@@@@@@@@", 32);
return 0;
}
#include <support/test-driver.c>

68
string/tst-strlcpy.c Normal file
View File

@ -0,0 +1,68 @@
/* Test the strlcpy function.
Copyright (C) 2023 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <support/check.h>
static int
do_test (void)
{
struct {
char buf1[16];
char buf2[16];
} s;
/* Nothing is written to the destination if its size is 0. */
memset (&s, '@', sizeof (s));
TEST_COMPARE (strlcpy (s.buf1, "Hello!", 0), 6);
TEST_COMPARE_BLOB (&s, sizeof (s), "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", 32);
/* No bytes are are modified in the target buffer if the source
string is short enough. */
memset (&s, '@', sizeof (s));
TEST_COMPARE (strlcpy (s.buf1, "Hello!", sizeof (s.buf1)), 6);
TEST_COMPARE_BLOB (&s, sizeof (s), "Hello!\0@@@@@@@@@@@@@@@@@@@@@@@@@", 32);
/* A source string which fits exactly into the destination buffer is
not truncated. */
memset (&s, '@', sizeof (s));
TEST_COMPARE (strlcpy (s.buf1, "Hello, world!!!", sizeof (s.buf1)), 15);
TEST_COMPARE_BLOB (&s, sizeof (s),
"Hello, world!!!\0@@@@@@@@@@@@@@@@@@@@@@@@@", 32);
/* A source string one character longer than the destination buffer
is truncated by one character. The untruncated source length is
returned. */
memset (&s, '@', sizeof (s));
TEST_COMPARE (strlcpy (s.buf1, "Hello, world!!!!", sizeof (s.buf1)), 16);
TEST_COMPARE_BLOB (&s, sizeof (s),
"Hello, world!!!\0@@@@@@@@@@@@@@@@@@@@@@@@@", 32);
/* An even longer source string is truncated as well, and the
original length is returned. */
memset (&s, '@', sizeof (s));
TEST_COMPARE (strlcpy (s.buf1, "Hello, world!!!!!!!!", sizeof (s.buf1)), 20);
TEST_COMPARE_BLOB (&s, sizeof (s),
"Hello, world!!!\0@@@@@@@@@@@@@@@@@@@@@@@@@", 32);
return 0;
}
#include <support/test-driver.c>

View File

@ -2326,6 +2326,10 @@ GLIBC_2.38 __isoc23_wcstoull F
GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoull_l F
GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wcstoumax F
GLIBC_2.38 __isoc23_wscanf F GLIBC_2.38 __isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F
GLIBC_2.4 __confstr_chk F GLIBC_2.4 __confstr_chk F
GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_chk F
GLIBC_2.4 __fgets_unlocked_chk F GLIBC_2.4 __fgets_unlocked_chk F

View File

@ -2665,3 +2665,7 @@ GLIBC_2.38 __isoc23_wcstoull F
GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoull_l F
GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wcstoumax F
GLIBC_2.38 __isoc23_wscanf F GLIBC_2.38 __isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F

View File

@ -2774,6 +2774,10 @@ GLIBC_2.38 __nldbl___isoc23_vsscanf F
GLIBC_2.38 __nldbl___isoc23_vswscanf F GLIBC_2.38 __nldbl___isoc23_vswscanf F
GLIBC_2.38 __nldbl___isoc23_vwscanf F GLIBC_2.38 __nldbl___isoc23_vwscanf F
GLIBC_2.38 __nldbl___isoc23_wscanf F GLIBC_2.38 __nldbl___isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F
GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_fprintf F
GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_printf F
GLIBC_2.4 _IO_sprintf F GLIBC_2.4 _IO_sprintf F

View File

@ -2426,3 +2426,7 @@ GLIBC_2.38 __isoc23_wcstoull F
GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoull_l F
GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wcstoumax F
GLIBC_2.38 __isoc23_wscanf F GLIBC_2.38 __isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F

View File

@ -546,6 +546,10 @@ GLIBC_2.38 __isoc23_wcstoull F
GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoull_l F
GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wcstoumax F
GLIBC_2.38 __isoc23_wscanf F GLIBC_2.38 __isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F
GLIBC_2.4 _Exit F GLIBC_2.4 _Exit F
GLIBC_2.4 _IO_2_1_stderr_ D 0xa0 GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
GLIBC_2.4 _IO_2_1_stdin_ D 0xa0 GLIBC_2.4 _IO_2_1_stdin_ D 0xa0

View File

@ -543,6 +543,10 @@ GLIBC_2.38 __isoc23_wcstoull F
GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoull_l F
GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wcstoumax F
GLIBC_2.38 __isoc23_wscanf F GLIBC_2.38 __isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F
GLIBC_2.4 _Exit F GLIBC_2.4 _Exit F
GLIBC_2.4 _IO_2_1_stderr_ D 0xa0 GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
GLIBC_2.4 _IO_2_1_stdin_ D 0xa0 GLIBC_2.4 _IO_2_1_stdin_ D 0xa0

View File

@ -2702,3 +2702,7 @@ GLIBC_2.38 __isoc23_wcstoull F
GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoull_l F
GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wcstoumax F
GLIBC_2.38 __isoc23_wscanf F GLIBC_2.38 __isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F

View File

@ -2651,6 +2651,10 @@ GLIBC_2.38 __isoc23_wcstoull F
GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoull_l F
GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wcstoumax F
GLIBC_2.38 __isoc23_wscanf F GLIBC_2.38 __isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F
GLIBC_2.4 __confstr_chk F GLIBC_2.4 __confstr_chk F
GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_chk F
GLIBC_2.4 __fgets_unlocked_chk F GLIBC_2.4 __fgets_unlocked_chk F

View File

@ -2835,6 +2835,10 @@ GLIBC_2.38 __isoc23_wcstoull F
GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoull_l F
GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wcstoumax F
GLIBC_2.38 __isoc23_wscanf F GLIBC_2.38 __isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F
GLIBC_2.4 __confstr_chk F GLIBC_2.4 __confstr_chk F
GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_chk F
GLIBC_2.4 __fgets_unlocked_chk F GLIBC_2.4 __fgets_unlocked_chk F

View File

@ -2600,6 +2600,10 @@ GLIBC_2.38 __isoc23_wcstoull F
GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoull_l F
GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wcstoumax F
GLIBC_2.38 __isoc23_wscanf F GLIBC_2.38 __isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F
GLIBC_2.4 __confstr_chk F GLIBC_2.4 __confstr_chk F
GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_chk F
GLIBC_2.4 __fgets_unlocked_chk F GLIBC_2.4 __fgets_unlocked_chk F

View File

@ -2186,3 +2186,7 @@ GLIBC_2.38 __isoc23_wcstoull F
GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoull_l F
GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wcstoumax F
GLIBC_2.38 __isoc23_wscanf F GLIBC_2.38 __isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F

View File

@ -547,6 +547,10 @@ GLIBC_2.38 __isoc23_wcstoull F
GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoull_l F
GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wcstoumax F
GLIBC_2.38 __isoc23_wscanf F GLIBC_2.38 __isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F
GLIBC_2.4 _Exit F GLIBC_2.4 _Exit F
GLIBC_2.4 _IO_2_1_stderr_ D 0x98 GLIBC_2.4 _IO_2_1_stderr_ D 0x98
GLIBC_2.4 _IO_2_1_stdin_ D 0x98 GLIBC_2.4 _IO_2_1_stdin_ D 0x98

View File

@ -2778,6 +2778,10 @@ GLIBC_2.38 __isoc23_wcstoull F
GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoull_l F
GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wcstoumax F
GLIBC_2.38 __isoc23_wscanf F GLIBC_2.38 __isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F
GLIBC_2.4 __confstr_chk F GLIBC_2.4 __confstr_chk F
GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_chk F
GLIBC_2.4 __fgets_unlocked_chk F GLIBC_2.4 __fgets_unlocked_chk F

View File

@ -2751,3 +2751,7 @@ GLIBC_2.38 __isoc23_wcstoull F
GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoull_l F
GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wcstoumax F
GLIBC_2.38 __isoc23_wscanf F GLIBC_2.38 __isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F

View File

@ -2748,3 +2748,7 @@ GLIBC_2.38 __isoc23_wcstoull F
GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoull_l F
GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wcstoumax F
GLIBC_2.38 __isoc23_wscanf F GLIBC_2.38 __isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F

View File

@ -2743,6 +2743,10 @@ GLIBC_2.38 __isoc23_wcstoull F
GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoull_l F
GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wcstoumax F
GLIBC_2.38 __isoc23_wscanf F GLIBC_2.38 __isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F
GLIBC_2.4 __confstr_chk F GLIBC_2.4 __confstr_chk F
GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_chk F
GLIBC_2.4 __fgets_unlocked_chk F GLIBC_2.4 __fgets_unlocked_chk F

View File

@ -2741,6 +2741,10 @@ GLIBC_2.38 __isoc23_wcstoull F
GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoull_l F
GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wcstoumax F
GLIBC_2.38 __isoc23_wscanf F GLIBC_2.38 __isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F
GLIBC_2.4 __confstr_chk F GLIBC_2.4 __confstr_chk F
GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_chk F
GLIBC_2.4 __fgets_unlocked_chk F GLIBC_2.4 __fgets_unlocked_chk F

View File

@ -2749,6 +2749,10 @@ GLIBC_2.38 __isoc23_wcstoull F
GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoull_l F
GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wcstoumax F
GLIBC_2.38 __isoc23_wscanf F GLIBC_2.38 __isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F
GLIBC_2.4 __confstr_chk F GLIBC_2.4 __confstr_chk F
GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_chk F
GLIBC_2.4 __fgets_unlocked_chk F GLIBC_2.4 __fgets_unlocked_chk F

View File

@ -2651,6 +2651,10 @@ GLIBC_2.38 __isoc23_wcstoull F
GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoull_l F
GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wcstoumax F
GLIBC_2.38 __isoc23_wscanf F GLIBC_2.38 __isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F
GLIBC_2.4 __confstr_chk F GLIBC_2.4 __confstr_chk F
GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_chk F
GLIBC_2.4 __fgets_unlocked_chk F GLIBC_2.4 __fgets_unlocked_chk F

View File

@ -2790,3 +2790,7 @@ GLIBC_2.38 __isoc23_wcstoull F
GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoull_l F
GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wcstoumax F
GLIBC_2.38 __isoc23_wscanf F GLIBC_2.38 __isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F

View File

@ -2172,3 +2172,7 @@ GLIBC_2.38 __isoc23_wcstoull F
GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoull_l F
GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wcstoumax F
GLIBC_2.38 __isoc23_wscanf F GLIBC_2.38 __isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F

View File

@ -2817,6 +2817,10 @@ GLIBC_2.38 __nldbl___isoc23_vsscanf F
GLIBC_2.38 __nldbl___isoc23_vswscanf F GLIBC_2.38 __nldbl___isoc23_vswscanf F
GLIBC_2.38 __nldbl___isoc23_vwscanf F GLIBC_2.38 __nldbl___isoc23_vwscanf F
GLIBC_2.38 __nldbl___isoc23_wscanf F GLIBC_2.38 __nldbl___isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F
GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_fprintf F
GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_printf F
GLIBC_2.4 _IO_sprintf F GLIBC_2.4 _IO_sprintf F

View File

@ -2850,6 +2850,10 @@ GLIBC_2.38 __nldbl___isoc23_vsscanf F
GLIBC_2.38 __nldbl___isoc23_vswscanf F GLIBC_2.38 __nldbl___isoc23_vswscanf F
GLIBC_2.38 __nldbl___isoc23_vwscanf F GLIBC_2.38 __nldbl___isoc23_vwscanf F
GLIBC_2.38 __nldbl___isoc23_wscanf F GLIBC_2.38 __nldbl___isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F
GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_fprintf F
GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_printf F
GLIBC_2.4 _IO_sprintf F GLIBC_2.4 _IO_sprintf F

View File

@ -2571,6 +2571,10 @@ GLIBC_2.38 __nldbl___isoc23_vsscanf F
GLIBC_2.38 __nldbl___isoc23_vswscanf F GLIBC_2.38 __nldbl___isoc23_vswscanf F
GLIBC_2.38 __nldbl___isoc23_vwscanf F GLIBC_2.38 __nldbl___isoc23_vwscanf F
GLIBC_2.38 __nldbl___isoc23_wscanf F GLIBC_2.38 __nldbl___isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F
GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_fprintf F
GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_printf F
GLIBC_2.4 _IO_sprintf F GLIBC_2.4 _IO_sprintf F

View File

@ -2885,3 +2885,7 @@ GLIBC_2.38 __nldbl___isoc23_vsscanf F
GLIBC_2.38 __nldbl___isoc23_vswscanf F GLIBC_2.38 __nldbl___isoc23_vswscanf F
GLIBC_2.38 __nldbl___isoc23_vwscanf F GLIBC_2.38 __nldbl___isoc23_vwscanf F
GLIBC_2.38 __nldbl___isoc23_wscanf F GLIBC_2.38 __nldbl___isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F

View File

@ -2428,3 +2428,7 @@ GLIBC_2.38 __isoc23_wcstoull F
GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoull_l F
GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wcstoumax F
GLIBC_2.38 __isoc23_wscanf F GLIBC_2.38 __isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F

View File

@ -2628,3 +2628,7 @@ GLIBC_2.38 __isoc23_wcstoull F
GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoull_l F
GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wcstoumax F
GLIBC_2.38 __isoc23_wscanf F GLIBC_2.38 __isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F

View File

@ -2815,6 +2815,10 @@ GLIBC_2.38 __nldbl___isoc23_vsscanf F
GLIBC_2.38 __nldbl___isoc23_vswscanf F GLIBC_2.38 __nldbl___isoc23_vswscanf F
GLIBC_2.38 __nldbl___isoc23_vwscanf F GLIBC_2.38 __nldbl___isoc23_vwscanf F
GLIBC_2.38 __nldbl___isoc23_wscanf F GLIBC_2.38 __nldbl___isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F
GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_fprintf F
GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_printf F
GLIBC_2.4 _IO_sprintf F GLIBC_2.4 _IO_sprintf F

View File

@ -2608,6 +2608,10 @@ GLIBC_2.38 __nldbl___isoc23_vsscanf F
GLIBC_2.38 __nldbl___isoc23_vswscanf F GLIBC_2.38 __nldbl___isoc23_vswscanf F
GLIBC_2.38 __nldbl___isoc23_vwscanf F GLIBC_2.38 __nldbl___isoc23_vwscanf F
GLIBC_2.38 __nldbl___isoc23_wscanf F GLIBC_2.38 __nldbl___isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F
GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_fprintf F
GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_printf F
GLIBC_2.4 _IO_sprintf F GLIBC_2.4 _IO_sprintf F

View File

@ -2658,6 +2658,10 @@ GLIBC_2.38 __isoc23_wcstoull F
GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoull_l F
GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wcstoumax F
GLIBC_2.38 __isoc23_wscanf F GLIBC_2.38 __isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F
GLIBC_2.4 __confstr_chk F GLIBC_2.4 __confstr_chk F
GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_chk F
GLIBC_2.4 __fgets_unlocked_chk F GLIBC_2.4 __fgets_unlocked_chk F

View File

@ -2655,6 +2655,10 @@ GLIBC_2.38 __isoc23_wcstoull F
GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoull_l F
GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wcstoumax F
GLIBC_2.38 __isoc23_wscanf F GLIBC_2.38 __isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F
GLIBC_2.4 __confstr_chk F GLIBC_2.4 __confstr_chk F
GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_chk F
GLIBC_2.4 __fgets_unlocked_chk F GLIBC_2.4 __fgets_unlocked_chk F

View File

@ -2810,6 +2810,10 @@ GLIBC_2.38 __nldbl___isoc23_vsscanf F
GLIBC_2.38 __nldbl___isoc23_vswscanf F GLIBC_2.38 __nldbl___isoc23_vswscanf F
GLIBC_2.38 __nldbl___isoc23_vwscanf F GLIBC_2.38 __nldbl___isoc23_vwscanf F
GLIBC_2.38 __nldbl___isoc23_wscanf F GLIBC_2.38 __nldbl___isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F
GLIBC_2.4 _IO_fprintf F GLIBC_2.4 _IO_fprintf F
GLIBC_2.4 _IO_printf F GLIBC_2.4 _IO_printf F
GLIBC_2.4 _IO_sprintf F GLIBC_2.4 _IO_sprintf F

View File

@ -2623,6 +2623,10 @@ GLIBC_2.38 __isoc23_wcstoull F
GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoull_l F
GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wcstoumax F
GLIBC_2.38 __isoc23_wscanf F GLIBC_2.38 __isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F
GLIBC_2.4 __confstr_chk F GLIBC_2.4 __confstr_chk F
GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_chk F
GLIBC_2.4 __fgets_unlocked_chk F GLIBC_2.4 __fgets_unlocked_chk F

View File

@ -2574,6 +2574,10 @@ GLIBC_2.38 __isoc23_wcstoull F
GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoull_l F
GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wcstoumax F
GLIBC_2.38 __isoc23_wscanf F GLIBC_2.38 __isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F
GLIBC_2.4 __confstr_chk F GLIBC_2.4 __confstr_chk F
GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_chk F
GLIBC_2.4 __fgets_unlocked_chk F GLIBC_2.4 __fgets_unlocked_chk F

View File

@ -2680,3 +2680,7 @@ GLIBC_2.38 __isoc23_wcstoull F
GLIBC_2.38 __isoc23_wcstoull_l F GLIBC_2.38 __isoc23_wcstoull_l F
GLIBC_2.38 __isoc23_wcstoumax F GLIBC_2.38 __isoc23_wcstoumax F
GLIBC_2.38 __isoc23_wscanf F GLIBC_2.38 __isoc23_wscanf F
GLIBC_2.38 __strlcat_chk F
GLIBC_2.38 __strlcpy_chk F
GLIBC_2.38 strlcat F
GLIBC_2.38 strlcpy F