mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-09 14:50:05 +00:00
nonstring: Enable __FORTIFY_LEVEL=3
Use __builtin_dynamic_object_size in the remaining functions that don't have compiler builtins as is the case for string functions.
This commit is contained in:
parent
2a3224c536
commit
f9de8bfe1a
@ -35,12 +35,13 @@ extern int __REDIRECT (__poll_chk_warn, (struct pollfd *__fds, nfds_t __nfds,
|
||||
__fortify_function int
|
||||
poll (struct pollfd *__fds, nfds_t __nfds, int __timeout)
|
||||
{
|
||||
if (__bos (__fds) != (__SIZE_TYPE__) -1)
|
||||
if (__glibc_objsize (__fds) != (__SIZE_TYPE__) -1)
|
||||
{
|
||||
if (! __builtin_constant_p (__nfds))
|
||||
return __poll_chk (__fds, __nfds, __timeout, __bos (__fds));
|
||||
else if (__bos (__fds) / sizeof (*__fds) < __nfds)
|
||||
return __poll_chk_warn (__fds, __nfds, __timeout, __bos (__fds));
|
||||
return __poll_chk (__fds, __nfds, __timeout, __glibc_objsize (__fds));
|
||||
else if (__glibc_objsize (__fds) / sizeof (*__fds) < __nfds)
|
||||
return __poll_chk_warn (__fds, __nfds, __timeout,
|
||||
__glibc_objsize (__fds));
|
||||
}
|
||||
|
||||
return __poll_alias (__fds, __nfds, __timeout);
|
||||
@ -65,13 +66,14 @@ __fortify_function int
|
||||
ppoll (struct pollfd *__fds, nfds_t __nfds, const struct timespec *__timeout,
|
||||
const __sigset_t *__ss)
|
||||
{
|
||||
if (__bos (__fds) != (__SIZE_TYPE__) -1)
|
||||
if (__glibc_objsize (__fds) != (__SIZE_TYPE__) -1)
|
||||
{
|
||||
if (! __builtin_constant_p (__nfds))
|
||||
return __ppoll_chk (__fds, __nfds, __timeout, __ss, __bos (__fds));
|
||||
else if (__bos (__fds) / sizeof (*__fds) < __nfds)
|
||||
return __ppoll_chk (__fds, __nfds, __timeout, __ss,
|
||||
__glibc_objsize (__fds));
|
||||
else if (__glibc_objsize (__fds) / sizeof (*__fds) < __nfds)
|
||||
return __ppoll_chk_warn (__fds, __nfds, __timeout, __ss,
|
||||
__bos (__fds));
|
||||
__glibc_objsize (__fds));
|
||||
}
|
||||
|
||||
return __ppoll_alias (__fds, __nfds, __timeout, __ss);
|
||||
|
@ -31,7 +31,7 @@
|
||||
|
||||
|
||||
#ifdef __USE_EXTERN_INLINES
|
||||
/* For -D_FORTIFY_SOURCE{,=2} bits/stdio2.h will define a different
|
||||
/* For -D_FORTIFY_SOURCE{,=2,=3} bits/stdio2.h will define a different
|
||||
inline. */
|
||||
# if !(__USE_FORTIFY_LEVEL > 0 && defined __fortify_function)
|
||||
/* Write formatted output to stdout from argument list ARG. */
|
||||
|
@ -36,12 +36,13 @@ __fortify_function int
|
||||
__NTH (sprintf (char *__restrict __s, const char *__restrict __fmt, ...))
|
||||
{
|
||||
return __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,
|
||||
__bos (__s), __fmt, __va_arg_pack ());
|
||||
__glibc_objsize (__s), __fmt,
|
||||
__va_arg_pack ());
|
||||
}
|
||||
#elif !defined __cplusplus
|
||||
# define sprintf(str, ...) \
|
||||
__builtin___sprintf_chk (str, __USE_FORTIFY_LEVEL - 1, __bos (str), \
|
||||
__VA_ARGS__)
|
||||
__builtin___sprintf_chk (str, __USE_FORTIFY_LEVEL - 1, \
|
||||
__glibc_objsize (str), __VA_ARGS__)
|
||||
#endif
|
||||
|
||||
__fortify_function int
|
||||
@ -49,7 +50,7 @@ __NTH (vsprintf (char *__restrict __s, const char *__restrict __fmt,
|
||||
__gnuc_va_list __ap))
|
||||
{
|
||||
return __builtin___vsprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,
|
||||
__bos (__s), __fmt, __ap);
|
||||
__glibc_objsize (__s), __fmt, __ap);
|
||||
}
|
||||
|
||||
#if defined __USE_ISOC99 || defined __USE_UNIX98
|
||||
@ -68,12 +69,13 @@ __NTH (snprintf (char *__restrict __s, size_t __n,
|
||||
const char *__restrict __fmt, ...))
|
||||
{
|
||||
return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
|
||||
__bos (__s), __fmt, __va_arg_pack ());
|
||||
__glibc_objsize (__s), __fmt,
|
||||
__va_arg_pack ());
|
||||
}
|
||||
# elif !defined __cplusplus
|
||||
# define snprintf(str, len, ...) \
|
||||
__builtin___snprintf_chk (str, len, __USE_FORTIFY_LEVEL - 1, __bos (str), \
|
||||
__VA_ARGS__)
|
||||
__builtin___snprintf_chk (str, len, __USE_FORTIFY_LEVEL - 1, \
|
||||
__glibc_objsize (str), __VA_ARGS__)
|
||||
# endif
|
||||
|
||||
__fortify_function int
|
||||
@ -81,7 +83,7 @@ __NTH (vsnprintf (char *__restrict __s, size_t __n,
|
||||
const char *__restrict __fmt, __gnuc_va_list __ap))
|
||||
{
|
||||
return __builtin___vsnprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
|
||||
__bos (__s), __fmt, __ap);
|
||||
__glibc_objsize (__s), __fmt, __ap);
|
||||
}
|
||||
|
||||
#endif
|
||||
@ -237,8 +239,8 @@ extern char *__REDIRECT (__gets_warn, (char *__str), gets)
|
||||
__fortify_function __wur char *
|
||||
gets (char *__str)
|
||||
{
|
||||
if (__bos (__str) != (size_t) -1)
|
||||
return __gets_chk (__str, __bos (__str));
|
||||
if (__glibc_objsize (__str) != (size_t) -1)
|
||||
return __gets_chk (__str, __glibc_objsize (__str));
|
||||
return __gets_warn (__str);
|
||||
}
|
||||
#endif
|
||||
@ -259,13 +261,13 @@ extern char *__REDIRECT (__fgets_chk_warn,
|
||||
__fortify_function __wur __attr_access ((__write_only__, 1, 2)) char *
|
||||
fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
|
||||
{
|
||||
if (__bos (__s) != (size_t) -1)
|
||||
if (__glibc_objsize (__s) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__n) || __n <= 0)
|
||||
return __fgets_chk (__s, __bos (__s), __n, __stream);
|
||||
return __fgets_chk (__s, __glibc_objsize (__s), __n, __stream);
|
||||
|
||||
if ((size_t) __n > __bos (__s))
|
||||
return __fgets_chk_warn (__s, __bos (__s), __n, __stream);
|
||||
if ((size_t) __n > __glibc_objsize (__s))
|
||||
return __fgets_chk_warn (__s, __glibc_objsize (__s), __n, __stream);
|
||||
}
|
||||
return __fgets_alias (__s, __n, __stream);
|
||||
}
|
||||
@ -289,15 +291,17 @@ __fortify_function __wur size_t
|
||||
fread (void *__restrict __ptr, size_t __size, size_t __n,
|
||||
FILE *__restrict __stream)
|
||||
{
|
||||
if (__bos0 (__ptr) != (size_t) -1)
|
||||
if (__glibc_objsize0 (__ptr) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__size)
|
||||
|| !__builtin_constant_p (__n)
|
||||
|| (__size | __n) >= (((size_t) 1) << (8 * sizeof (size_t) / 2)))
|
||||
return __fread_chk (__ptr, __bos0 (__ptr), __size, __n, __stream);
|
||||
return __fread_chk (__ptr, __glibc_objsize0 (__ptr), __size, __n,
|
||||
__stream);
|
||||
|
||||
if (__size * __n > __bos0 (__ptr))
|
||||
return __fread_chk_warn (__ptr, __bos0 (__ptr), __size, __n, __stream);
|
||||
if (__size * __n > __glibc_objsize0 (__ptr))
|
||||
return __fread_chk_warn (__ptr, __glibc_objsize0 (__ptr), __size, __n,
|
||||
__stream);
|
||||
}
|
||||
return __fread_alias (__ptr, __size, __n, __stream);
|
||||
}
|
||||
@ -319,13 +323,15 @@ extern char *__REDIRECT (__fgets_unlocked_chk_warn,
|
||||
__fortify_function __wur __attr_access ((__write_only__, 1, 2)) char *
|
||||
fgets_unlocked (char *__restrict __s, int __n, FILE *__restrict __stream)
|
||||
{
|
||||
if (__bos (__s) != (size_t) -1)
|
||||
if (__glibc_objsize (__s) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__n) || __n <= 0)
|
||||
return __fgets_unlocked_chk (__s, __bos (__s), __n, __stream);
|
||||
return __fgets_unlocked_chk (__s, __glibc_objsize (__s), __n,
|
||||
__stream);
|
||||
|
||||
if ((size_t) __n > __bos (__s))
|
||||
return __fgets_unlocked_chk_warn (__s, __bos (__s), __n, __stream);
|
||||
if ((size_t) __n > __glibc_objsize (__s))
|
||||
return __fgets_unlocked_chk_warn (__s, __glibc_objsize (__s), __n,
|
||||
__stream);
|
||||
}
|
||||
return __fgets_unlocked_alias (__s, __n, __stream);
|
||||
}
|
||||
@ -352,17 +358,17 @@ __fortify_function __wur size_t
|
||||
fread_unlocked (void *__restrict __ptr, size_t __size, size_t __n,
|
||||
FILE *__restrict __stream)
|
||||
{
|
||||
if (__bos0 (__ptr) != (size_t) -1)
|
||||
if (__glibc_objsize0 (__ptr) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__size)
|
||||
|| !__builtin_constant_p (__n)
|
||||
|| (__size | __n) >= (((size_t) 1) << (8 * sizeof (size_t) / 2)))
|
||||
return __fread_unlocked_chk (__ptr, __bos0 (__ptr), __size, __n,
|
||||
__stream);
|
||||
return __fread_unlocked_chk (__ptr, __glibc_objsize0 (__ptr), __size,
|
||||
__n, __stream);
|
||||
|
||||
if (__size * __n > __bos0 (__ptr))
|
||||
return __fread_unlocked_chk_warn (__ptr, __bos0 (__ptr), __size, __n,
|
||||
__stream);
|
||||
if (__size * __n > __glibc_objsize0 (__ptr))
|
||||
return __fread_unlocked_chk_warn (__ptr, __glibc_objsize0 (__ptr),
|
||||
__size, __n, __stream);
|
||||
}
|
||||
|
||||
# ifdef __USE_EXTERN_INLINES
|
||||
|
@ -35,13 +35,14 @@ extern ssize_t __REDIRECT (__read_chk_warn,
|
||||
__fortify_function __wur ssize_t
|
||||
read (int __fd, void *__buf, size_t __nbytes)
|
||||
{
|
||||
if (__bos0 (__buf) != (size_t) -1)
|
||||
if (__glibc_objsize0 (__buf) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__nbytes))
|
||||
return __read_chk (__fd, __buf, __nbytes, __bos0 (__buf));
|
||||
return __read_chk (__fd, __buf, __nbytes, __glibc_objsize0 (__buf));
|
||||
|
||||
if (__nbytes > __bos0 (__buf))
|
||||
return __read_chk_warn (__fd, __buf, __nbytes, __bos0 (__buf));
|
||||
if (__nbytes > __glibc_objsize0 (__buf))
|
||||
return __read_chk_warn (__fd, __buf, __nbytes,
|
||||
__glibc_objsize0 (__buf));
|
||||
}
|
||||
return __read_alias (__fd, __buf, __nbytes);
|
||||
}
|
||||
@ -77,14 +78,15 @@ extern ssize_t __REDIRECT (__pread64_chk_warn,
|
||||
__fortify_function __wur ssize_t
|
||||
pread (int __fd, void *__buf, size_t __nbytes, __off_t __offset)
|
||||
{
|
||||
if (__bos0 (__buf) != (size_t) -1)
|
||||
if (__glibc_objsize0 (__buf) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__nbytes))
|
||||
return __pread_chk (__fd, __buf, __nbytes, __offset, __bos0 (__buf));
|
||||
return __pread_chk (__fd, __buf, __nbytes, __offset,
|
||||
__glibc_objsize0 (__buf));
|
||||
|
||||
if ( __nbytes > __bos0 (__buf))
|
||||
if ( __nbytes > __glibc_objsize0 (__buf))
|
||||
return __pread_chk_warn (__fd, __buf, __nbytes, __offset,
|
||||
__bos0 (__buf));
|
||||
__glibc_objsize0 (__buf));
|
||||
}
|
||||
return __pread_alias (__fd, __buf, __nbytes, __offset);
|
||||
}
|
||||
@ -92,14 +94,15 @@ pread (int __fd, void *__buf, size_t __nbytes, __off_t __offset)
|
||||
__fortify_function __wur ssize_t
|
||||
pread (int __fd, void *__buf, size_t __nbytes, __off64_t __offset)
|
||||
{
|
||||
if (__bos0 (__buf) != (size_t) -1)
|
||||
if (__glibc_objsize0 (__buf) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__nbytes))
|
||||
return __pread64_chk (__fd, __buf, __nbytes, __offset, __bos0 (__buf));
|
||||
return __pread64_chk (__fd, __buf, __nbytes, __offset,
|
||||
__glibc_objsize0 (__buf));
|
||||
|
||||
if ( __nbytes > __bos0 (__buf))
|
||||
if ( __nbytes > __glibc_objsize0 (__buf))
|
||||
return __pread64_chk_warn (__fd, __buf, __nbytes, __offset,
|
||||
__bos0 (__buf));
|
||||
__glibc_objsize0 (__buf));
|
||||
}
|
||||
|
||||
return __pread64_alias (__fd, __buf, __nbytes, __offset);
|
||||
@ -110,14 +113,15 @@ pread (int __fd, void *__buf, size_t __nbytes, __off64_t __offset)
|
||||
__fortify_function __wur ssize_t
|
||||
pread64 (int __fd, void *__buf, size_t __nbytes, __off64_t __offset)
|
||||
{
|
||||
if (__bos0 (__buf) != (size_t) -1)
|
||||
if (__glibc_objsize0 (__buf) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__nbytes))
|
||||
return __pread64_chk (__fd, __buf, __nbytes, __offset, __bos0 (__buf));
|
||||
return __pread64_chk (__fd, __buf, __nbytes, __offset,
|
||||
__glibc_objsize0 (__buf));
|
||||
|
||||
if ( __nbytes > __bos0 (__buf))
|
||||
if ( __nbytes > __glibc_objsize0 (__buf))
|
||||
return __pread64_chk_warn (__fd, __buf, __nbytes, __offset,
|
||||
__bos0 (__buf));
|
||||
__glibc_objsize0 (__buf));
|
||||
}
|
||||
|
||||
return __pread64_alias (__fd, __buf, __nbytes, __offset);
|
||||
@ -145,13 +149,14 @@ __fortify_function __nonnull ((1, 2)) __wur ssize_t
|
||||
__NTH (readlink (const char *__restrict __path, char *__restrict __buf,
|
||||
size_t __len))
|
||||
{
|
||||
if (__bos (__buf) != (size_t) -1)
|
||||
if (__glibc_objsize (__buf) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__len))
|
||||
return __readlink_chk (__path, __buf, __len, __bos (__buf));
|
||||
return __readlink_chk (__path, __buf, __len, __glibc_objsize (__buf));
|
||||
|
||||
if ( __len > __bos (__buf))
|
||||
return __readlink_chk_warn (__path, __buf, __len, __bos (__buf));
|
||||
if ( __len > __glibc_objsize (__buf))
|
||||
return __readlink_chk_warn (__path, __buf, __len,
|
||||
__glibc_objsize (__buf));
|
||||
}
|
||||
return __readlink_alias (__path, __buf, __len);
|
||||
}
|
||||
@ -179,14 +184,15 @@ __fortify_function __nonnull ((2, 3)) __wur ssize_t
|
||||
__NTH (readlinkat (int __fd, const char *__restrict __path,
|
||||
char *__restrict __buf, size_t __len))
|
||||
{
|
||||
if (__bos (__buf) != (size_t) -1)
|
||||
if (__glibc_objsize (__buf) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__len))
|
||||
return __readlinkat_chk (__fd, __path, __buf, __len, __bos (__buf));
|
||||
return __readlinkat_chk (__fd, __path, __buf, __len,
|
||||
__glibc_objsize (__buf));
|
||||
|
||||
if (__len > __bos (__buf))
|
||||
if (__len > __glibc_objsize (__buf))
|
||||
return __readlinkat_chk_warn (__fd, __path, __buf, __len,
|
||||
__bos (__buf));
|
||||
__glibc_objsize (__buf));
|
||||
}
|
||||
return __readlinkat_alias (__fd, __path, __buf, __len);
|
||||
}
|
||||
@ -206,13 +212,13 @@ extern char *__REDIRECT_NTH (__getcwd_chk_warn,
|
||||
__fortify_function __wur char *
|
||||
__NTH (getcwd (char *__buf, size_t __size))
|
||||
{
|
||||
if (__bos (__buf) != (size_t) -1)
|
||||
if (__glibc_objsize (__buf) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__size))
|
||||
return __getcwd_chk (__buf, __size, __bos (__buf));
|
||||
return __getcwd_chk (__buf, __size, __glibc_objsize (__buf));
|
||||
|
||||
if (__size > __bos (__buf))
|
||||
return __getcwd_chk_warn (__buf, __size, __bos (__buf));
|
||||
if (__size > __glibc_objsize (__buf))
|
||||
return __getcwd_chk_warn (__buf, __size, __glibc_objsize (__buf));
|
||||
}
|
||||
return __getcwd_alias (__buf, __size);
|
||||
}
|
||||
@ -227,8 +233,8 @@ extern char *__REDIRECT_NTH (__getwd_warn, (char *__buf), getwd)
|
||||
__fortify_function __nonnull ((1)) __attribute_deprecated__ __wur char *
|
||||
__NTH (getwd (char *__buf))
|
||||
{
|
||||
if (__bos (__buf) != (size_t) -1)
|
||||
return __getwd_chk (__buf, __bos (__buf));
|
||||
if (__glibc_objsize (__buf) != (size_t) -1)
|
||||
return __getwd_chk (__buf, __glibc_objsize (__buf));
|
||||
return __getwd_warn (__buf);
|
||||
}
|
||||
#endif
|
||||
@ -248,13 +254,14 @@ extern size_t __REDIRECT_NTH (__confstr_chk_warn,
|
||||
__fortify_function size_t
|
||||
__NTH (confstr (int __name, char *__buf, size_t __len))
|
||||
{
|
||||
if (__bos (__buf) != (size_t) -1)
|
||||
if (__glibc_objsize (__buf) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__len))
|
||||
return __confstr_chk (__name, __buf, __len, __bos (__buf));
|
||||
return __confstr_chk (__name, __buf, __len, __glibc_objsize (__buf));
|
||||
|
||||
if (__bos (__buf) < __len)
|
||||
return __confstr_chk_warn (__name, __buf, __len, __bos (__buf));
|
||||
if (__glibc_objsize (__buf) < __len)
|
||||
return __confstr_chk_warn (__name, __buf, __len,
|
||||
__glibc_objsize (__buf));
|
||||
}
|
||||
return __confstr_alias (__name, __buf, __len);
|
||||
}
|
||||
@ -273,13 +280,13 @@ extern int __REDIRECT_NTH (__getgroups_chk_warn,
|
||||
__fortify_function int
|
||||
__NTH (getgroups (int __size, __gid_t __list[]))
|
||||
{
|
||||
if (__bos (__list) != (size_t) -1)
|
||||
if (__glibc_objsize (__list) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__size) || __size < 0)
|
||||
return __getgroups_chk (__size, __list, __bos (__list));
|
||||
return __getgroups_chk (__size, __list, __glibc_objsize (__list));
|
||||
|
||||
if (__size * sizeof (__gid_t) > __bos (__list))
|
||||
return __getgroups_chk_warn (__size, __list, __bos (__list));
|
||||
if (__size * sizeof (__gid_t) > __glibc_objsize (__list))
|
||||
return __getgroups_chk_warn (__size, __list, __glibc_objsize (__list));
|
||||
}
|
||||
return __getgroups_alias (__size, __list);
|
||||
}
|
||||
@ -300,13 +307,15 @@ extern int __REDIRECT_NTH (__ttyname_r_chk_warn,
|
||||
__fortify_function int
|
||||
__NTH (ttyname_r (int __fd, char *__buf, size_t __buflen))
|
||||
{
|
||||
if (__bos (__buf) != (size_t) -1)
|
||||
if (__glibc_objsize (__buf) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__buflen))
|
||||
return __ttyname_r_chk (__fd, __buf, __buflen, __bos (__buf));
|
||||
return __ttyname_r_chk (__fd, __buf, __buflen,
|
||||
__glibc_objsize (__buf));
|
||||
|
||||
if (__buflen > __bos (__buf))
|
||||
return __ttyname_r_chk_warn (__fd, __buf, __buflen, __bos (__buf));
|
||||
if (__buflen > __glibc_objsize (__buf))
|
||||
return __ttyname_r_chk_warn (__fd, __buf, __buflen,
|
||||
__glibc_objsize (__buf));
|
||||
}
|
||||
return __ttyname_r_alias (__fd, __buf, __buflen);
|
||||
}
|
||||
@ -326,13 +335,14 @@ extern int __REDIRECT (__getlogin_r_chk_warn,
|
||||
__fortify_function int
|
||||
getlogin_r (char *__buf, size_t __buflen)
|
||||
{
|
||||
if (__bos (__buf) != (size_t) -1)
|
||||
if (__glibc_objsize (__buf) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__buflen))
|
||||
return __getlogin_r_chk (__buf, __buflen, __bos (__buf));
|
||||
return __getlogin_r_chk (__buf, __buflen, __glibc_objsize (__buf));
|
||||
|
||||
if (__buflen > __bos (__buf))
|
||||
return __getlogin_r_chk_warn (__buf, __buflen, __bos (__buf));
|
||||
if (__buflen > __glibc_objsize (__buf))
|
||||
return __getlogin_r_chk_warn (__buf, __buflen,
|
||||
__glibc_objsize (__buf));
|
||||
}
|
||||
return __getlogin_r_alias (__buf, __buflen);
|
||||
}
|
||||
@ -354,13 +364,14 @@ extern int __REDIRECT_NTH (__gethostname_chk_warn,
|
||||
__fortify_function int
|
||||
__NTH (gethostname (char *__buf, size_t __buflen))
|
||||
{
|
||||
if (__bos (__buf) != (size_t) -1)
|
||||
if (__glibc_objsize (__buf) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__buflen))
|
||||
return __gethostname_chk (__buf, __buflen, __bos (__buf));
|
||||
return __gethostname_chk (__buf, __buflen, __glibc_objsize (__buf));
|
||||
|
||||
if (__buflen > __bos (__buf))
|
||||
return __gethostname_chk_warn (__buf, __buflen, __bos (__buf));
|
||||
if (__buflen > __glibc_objsize (__buf))
|
||||
return __gethostname_chk_warn (__buf, __buflen,
|
||||
__glibc_objsize (__buf));
|
||||
}
|
||||
return __gethostname_alias (__buf, __buflen);
|
||||
}
|
||||
@ -384,13 +395,14 @@ extern int __REDIRECT_NTH (__getdomainname_chk_warn,
|
||||
__fortify_function int
|
||||
__NTH (getdomainname (char *__buf, size_t __buflen))
|
||||
{
|
||||
if (__bos (__buf) != (size_t) -1)
|
||||
if (__glibc_objsize (__buf) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__buflen))
|
||||
return __getdomainname_chk (__buf, __buflen, __bos (__buf));
|
||||
return __getdomainname_chk (__buf, __buflen, __glibc_objsize (__buf));
|
||||
|
||||
if (__buflen > __bos (__buf))
|
||||
return __getdomainname_chk_warn (__buf, __buflen, __bos (__buf));
|
||||
if (__buflen > __glibc_objsize (__buf))
|
||||
return __getdomainname_chk_warn (__buf, __buflen,
|
||||
__glibc_objsize (__buf));
|
||||
}
|
||||
return __getdomainname_alias (__buf, __buflen);
|
||||
}
|
||||
|
@ -33,13 +33,15 @@ extern ssize_t __REDIRECT (__recv_chk_warn,
|
||||
__fortify_function ssize_t
|
||||
recv (int __fd, void *__buf, size_t __n, int __flags)
|
||||
{
|
||||
if (__bos0 (__buf) != (size_t) -1)
|
||||
if (__glibc_objsize0 (__buf) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__n))
|
||||
return __recv_chk (__fd, __buf, __n, __bos0 (__buf), __flags);
|
||||
return __recv_chk (__fd, __buf, __n, __glibc_objsize0 (__buf),
|
||||
__flags);
|
||||
|
||||
if (__n > __bos0 (__buf))
|
||||
return __recv_chk_warn (__fd, __buf, __n, __bos0 (__buf), __flags);
|
||||
if (__n > __glibc_objsize0 (__buf))
|
||||
return __recv_chk_warn (__fd, __buf, __n, __glibc_objsize0 (__buf),
|
||||
__flags);
|
||||
}
|
||||
return __recv_alias (__fd, __buf, __n, __flags);
|
||||
}
|
||||
@ -64,14 +66,14 @@ __fortify_function ssize_t
|
||||
recvfrom (int __fd, void *__restrict __buf, size_t __n, int __flags,
|
||||
__SOCKADDR_ARG __addr, socklen_t *__restrict __addr_len)
|
||||
{
|
||||
if (__bos0 (__buf) != (size_t) -1)
|
||||
if (__glibc_objsize0 (__buf) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__n))
|
||||
return __recvfrom_chk (__fd, __buf, __n, __bos0 (__buf), __flags,
|
||||
__addr, __addr_len);
|
||||
if (__n > __bos0 (__buf))
|
||||
return __recvfrom_chk_warn (__fd, __buf, __n, __bos0 (__buf), __flags,
|
||||
__addr, __addr_len);
|
||||
return __recvfrom_chk (__fd, __buf, __n, __glibc_objsize0 (__buf),
|
||||
__flags, __addr, __addr_len);
|
||||
if (__n > __glibc_objsize0 (__buf))
|
||||
return __recvfrom_chk_warn (__fd, __buf, __n, __glibc_objsize0 (__buf),
|
||||
__flags, __addr, __addr_len);
|
||||
}
|
||||
return __recvfrom_alias (__fd, __buf, __n, __flags, __addr, __addr_len);
|
||||
}
|
||||
|
@ -36,13 +36,14 @@ extern char *__REDIRECT_NTH (__realpath_chk_warn,
|
||||
__fortify_function __wur char *
|
||||
__NTH (realpath (const char *__restrict __name, char *__restrict __resolved))
|
||||
{
|
||||
if (__bos (__resolved) != (size_t) -1)
|
||||
if (__glibc_objsize (__resolved) != (size_t) -1)
|
||||
{
|
||||
#if defined _LIBC_LIMITS_H_ && defined PATH_MAX
|
||||
if (__bos (__resolved) < PATH_MAX)
|
||||
return __realpath_chk_warn (__name, __resolved, __bos (__resolved));
|
||||
if (__glibc_objsize (__resolved) < PATH_MAX)
|
||||
return __realpath_chk_warn (__name, __resolved,
|
||||
__glibc_objsize (__resolved));
|
||||
#endif
|
||||
return __realpath_chk (__name, __resolved, __bos (__resolved));
|
||||
return __realpath_chk (__name, __resolved, __glibc_objsize (__resolved));
|
||||
}
|
||||
|
||||
return __realpath_alias (__name, __resolved);
|
||||
@ -64,12 +65,14 @@ extern int __REDIRECT_NTH (__ptsname_r_chk_warn,
|
||||
__fortify_function int
|
||||
__NTH (ptsname_r (int __fd, char *__buf, size_t __buflen))
|
||||
{
|
||||
if (__bos (__buf) != (size_t) -1)
|
||||
if (__glibc_objsize (__buf) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__buflen))
|
||||
return __ptsname_r_chk (__fd, __buf, __buflen, __bos (__buf));
|
||||
if (__buflen > __bos (__buf))
|
||||
return __ptsname_r_chk_warn (__fd, __buf, __buflen, __bos (__buf));
|
||||
return __ptsname_r_chk (__fd, __buf, __buflen,
|
||||
__glibc_objsize (__buf));
|
||||
if (__buflen > __glibc_objsize (__buf))
|
||||
return __ptsname_r_chk_warn (__fd, __buf, __buflen,
|
||||
__glibc_objsize (__buf));
|
||||
}
|
||||
return __ptsname_r_alias (__fd, __buf, __buflen);
|
||||
}
|
||||
@ -90,8 +93,9 @@ __NTH (wctomb (char *__s, wchar_t __wchar))
|
||||
#if defined MB_LEN_MAX && MB_LEN_MAX != __STDLIB_MB_LEN_MAX
|
||||
# error "Assumed value of MB_LEN_MAX wrong"
|
||||
#endif
|
||||
if (__bos (__s) != (size_t) -1 && __STDLIB_MB_LEN_MAX > __bos (__s))
|
||||
return __wctomb_chk (__s, __wchar, __bos (__s));
|
||||
if (__glibc_objsize (__s) != (size_t) -1
|
||||
&& __STDLIB_MB_LEN_MAX > __glibc_objsize (__s))
|
||||
return __wctomb_chk (__s, __wchar, __glibc_objsize (__s));
|
||||
return __wctomb_alias (__s, __wchar);
|
||||
}
|
||||
|
||||
@ -116,15 +120,16 @@ __fortify_function size_t
|
||||
__NTH (mbstowcs (wchar_t *__restrict __dst, const char *__restrict __src,
|
||||
size_t __len))
|
||||
{
|
||||
if (__bos (__dst) != (size_t) -1)
|
||||
if (__glibc_objsize (__dst) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__len))
|
||||
return __mbstowcs_chk (__dst, __src, __len,
|
||||
__bos (__dst) / sizeof (wchar_t));
|
||||
__glibc_objsize (__dst) / sizeof (wchar_t));
|
||||
|
||||
if (__len > __bos (__dst) / sizeof (wchar_t))
|
||||
if (__len > __glibc_objsize (__dst) / sizeof (wchar_t))
|
||||
return __mbstowcs_chk_warn (__dst, __src, __len,
|
||||
__bos (__dst) / sizeof (wchar_t));
|
||||
(__glibc_objsize (__dst)
|
||||
/ sizeof (wchar_t)));
|
||||
}
|
||||
return __mbstowcs_alias (__dst, __src, __len);
|
||||
}
|
||||
@ -149,12 +154,13 @@ __fortify_function size_t
|
||||
__NTH (wcstombs (char *__restrict __dst, const wchar_t *__restrict __src,
|
||||
size_t __len))
|
||||
{
|
||||
if (__bos (__dst) != (size_t) -1)
|
||||
if (__glibc_objsize (__dst) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__len))
|
||||
return __wcstombs_chk (__dst, __src, __len, __bos (__dst));
|
||||
if (__len > __bos (__dst))
|
||||
return __wcstombs_chk_warn (__dst, __src, __len, __bos (__dst));
|
||||
return __wcstombs_chk (__dst, __src, __len, __glibc_objsize (__dst));
|
||||
if (__len > __glibc_objsize (__dst))
|
||||
return __wcstombs_chk_warn (__dst, __src, __len,
|
||||
__glibc_objsize (__dst));
|
||||
}
|
||||
return __wcstombs_alias (__dst, __src, __len);
|
||||
}
|
||||
|
@ -39,15 +39,15 @@ __fortify_function wchar_t *
|
||||
__NTH (wmemcpy (wchar_t *__restrict __s1, const wchar_t *__restrict __s2,
|
||||
size_t __n))
|
||||
{
|
||||
if (__bos0 (__s1) != (size_t) -1)
|
||||
if (__glibc_objsize0 (__s1) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__n))
|
||||
return __wmemcpy_chk (__s1, __s2, __n,
|
||||
__bos0 (__s1) / sizeof (wchar_t));
|
||||
__glibc_objsize0 (__s1) / sizeof (wchar_t));
|
||||
|
||||
if (__n > __bos0 (__s1) / sizeof (wchar_t))
|
||||
if (__n > __glibc_objsize0 (__s1) / sizeof (wchar_t))
|
||||
return __wmemcpy_chk_warn (__s1, __s2, __n,
|
||||
__bos0 (__s1) / sizeof (wchar_t));
|
||||
__glibc_objsize0 (__s1) / sizeof (wchar_t));
|
||||
}
|
||||
return __wmemcpy_alias (__s1, __s2, __n);
|
||||
}
|
||||
@ -67,15 +67,16 @@ extern wchar_t *__REDIRECT_NTH (__wmemmove_chk_warn,
|
||||
__fortify_function wchar_t *
|
||||
__NTH (wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n))
|
||||
{
|
||||
if (__bos0 (__s1) != (size_t) -1)
|
||||
if (__glibc_objsize0 (__s1) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__n))
|
||||
return __wmemmove_chk (__s1, __s2, __n,
|
||||
__bos0 (__s1) / sizeof (wchar_t));
|
||||
__glibc_objsize0 (__s1) / sizeof (wchar_t));
|
||||
|
||||
if (__n > __bos0 (__s1) / sizeof (wchar_t))
|
||||
if (__n > __glibc_objsize0 (__s1) / sizeof (wchar_t))
|
||||
return __wmemmove_chk_warn (__s1, __s2, __n,
|
||||
__bos0 (__s1) / sizeof (wchar_t));
|
||||
(__glibc_objsize0 (__s1)
|
||||
/ sizeof (wchar_t)));
|
||||
}
|
||||
return __wmemmove_alias (__s1, __s2, __n);
|
||||
}
|
||||
@ -100,15 +101,16 @@ __fortify_function wchar_t *
|
||||
__NTH (wmempcpy (wchar_t *__restrict __s1, const wchar_t *__restrict __s2,
|
||||
size_t __n))
|
||||
{
|
||||
if (__bos0 (__s1) != (size_t) -1)
|
||||
if (__glibc_objsize0 (__s1) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__n))
|
||||
return __wmempcpy_chk (__s1, __s2, __n,
|
||||
__bos0 (__s1) / sizeof (wchar_t));
|
||||
__glibc_objsize0 (__s1) / sizeof (wchar_t));
|
||||
|
||||
if (__n > __bos0 (__s1) / sizeof (wchar_t))
|
||||
if (__n > __glibc_objsize0 (__s1) / sizeof (wchar_t))
|
||||
return __wmempcpy_chk_warn (__s1, __s2, __n,
|
||||
__bos0 (__s1) / sizeof (wchar_t));
|
||||
(__glibc_objsize0 (__s1)
|
||||
/ sizeof (wchar_t)));
|
||||
}
|
||||
return __wmempcpy_alias (__s1, __s2, __n);
|
||||
}
|
||||
@ -128,14 +130,15 @@ extern wchar_t *__REDIRECT_NTH (__wmemset_chk_warn,
|
||||
__fortify_function wchar_t *
|
||||
__NTH (wmemset (wchar_t *__s, wchar_t __c, size_t __n))
|
||||
{
|
||||
if (__bos0 (__s) != (size_t) -1)
|
||||
if (__glibc_objsize0 (__s) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__n))
|
||||
return __wmemset_chk (__s, __c, __n, __bos0 (__s) / sizeof (wchar_t));
|
||||
return __wmemset_chk (__s, __c, __n,
|
||||
__glibc_objsize0 (__s) / sizeof (wchar_t));
|
||||
|
||||
if (__n > __bos0 (__s) / sizeof (wchar_t))
|
||||
if (__n > __glibc_objsize0 (__s) / sizeof (wchar_t))
|
||||
return __wmemset_chk_warn (__s, __c, __n,
|
||||
__bos0 (__s) / sizeof (wchar_t));
|
||||
__glibc_objsize0 (__s) / sizeof (wchar_t));
|
||||
}
|
||||
return __wmemset_alias (__s, __c, __n);
|
||||
}
|
||||
@ -151,8 +154,9 @@ extern wchar_t *__REDIRECT_NTH (__wcscpy_alias,
|
||||
__fortify_function wchar_t *
|
||||
__NTH (wcscpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src))
|
||||
{
|
||||
if (__bos (__dest) != (size_t) -1)
|
||||
return __wcscpy_chk (__dest, __src, __bos (__dest) / sizeof (wchar_t));
|
||||
if (__glibc_objsize (__dest) != (size_t) -1)
|
||||
return __wcscpy_chk (__dest, __src,
|
||||
__glibc_objsize (__dest) / sizeof (wchar_t));
|
||||
return __wcscpy_alias (__dest, __src);
|
||||
}
|
||||
|
||||
@ -167,8 +171,9 @@ extern wchar_t *__REDIRECT_NTH (__wcpcpy_alias,
|
||||
__fortify_function wchar_t *
|
||||
__NTH (wcpcpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src))
|
||||
{
|
||||
if (__bos (__dest) != (size_t) -1)
|
||||
return __wcpcpy_chk (__dest, __src, __bos (__dest) / sizeof (wchar_t));
|
||||
if (__glibc_objsize (__dest) != (size_t) -1)
|
||||
return __wcpcpy_chk (__dest, __src,
|
||||
__glibc_objsize (__dest) / sizeof (wchar_t));
|
||||
return __wcpcpy_alias (__dest, __src);
|
||||
}
|
||||
|
||||
@ -191,14 +196,15 @@ __fortify_function wchar_t *
|
||||
__NTH (wcsncpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src,
|
||||
size_t __n))
|
||||
{
|
||||
if (__bos (__dest) != (size_t) -1)
|
||||
if (__glibc_objsize (__dest) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__n))
|
||||
return __wcsncpy_chk (__dest, __src, __n,
|
||||
__bos (__dest) / sizeof (wchar_t));
|
||||
if (__n > __bos (__dest) / sizeof (wchar_t))
|
||||
__glibc_objsize (__dest) / sizeof (wchar_t));
|
||||
if (__n > __glibc_objsize (__dest) / sizeof (wchar_t))
|
||||
return __wcsncpy_chk_warn (__dest, __src, __n,
|
||||
__bos (__dest) / sizeof (wchar_t));
|
||||
(__glibc_objsize (__dest)
|
||||
/ sizeof (wchar_t)));
|
||||
}
|
||||
return __wcsncpy_alias (__dest, __src, __n);
|
||||
}
|
||||
@ -222,14 +228,15 @@ __fortify_function wchar_t *
|
||||
__NTH (wcpncpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src,
|
||||
size_t __n))
|
||||
{
|
||||
if (__bos (__dest) != (size_t) -1)
|
||||
if (__glibc_objsize (__dest) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__n))
|
||||
return __wcpncpy_chk (__dest, __src, __n,
|
||||
__bos (__dest) / sizeof (wchar_t));
|
||||
if (__n > __bos (__dest) / sizeof (wchar_t))
|
||||
__glibc_objsize (__dest) / sizeof (wchar_t));
|
||||
if (__n > __glibc_objsize (__dest) / sizeof (wchar_t))
|
||||
return __wcpncpy_chk_warn (__dest, __src, __n,
|
||||
__bos (__dest) / sizeof (wchar_t));
|
||||
(__glibc_objsize (__dest)
|
||||
/ sizeof (wchar_t)));
|
||||
}
|
||||
return __wcpncpy_alias (__dest, __src, __n);
|
||||
}
|
||||
@ -245,8 +252,9 @@ extern wchar_t *__REDIRECT_NTH (__wcscat_alias,
|
||||
__fortify_function wchar_t *
|
||||
__NTH (wcscat (wchar_t *__restrict __dest, const wchar_t *__restrict __src))
|
||||
{
|
||||
if (__bos (__dest) != (size_t) -1)
|
||||
return __wcscat_chk (__dest, __src, __bos (__dest) / sizeof (wchar_t));
|
||||
if (__glibc_objsize (__dest) != (size_t) -1)
|
||||
return __wcscat_chk (__dest, __src,
|
||||
__glibc_objsize (__dest) / sizeof (wchar_t));
|
||||
return __wcscat_alias (__dest, __src);
|
||||
}
|
||||
|
||||
@ -263,9 +271,9 @@ __fortify_function wchar_t *
|
||||
__NTH (wcsncat (wchar_t *__restrict __dest, const wchar_t *__restrict __src,
|
||||
size_t __n))
|
||||
{
|
||||
if (__bos (__dest) != (size_t) -1)
|
||||
if (__glibc_objsize (__dest) != (size_t) -1)
|
||||
return __wcsncat_chk (__dest, __src, __n,
|
||||
__bos (__dest) / sizeof (wchar_t));
|
||||
__glibc_objsize (__dest) / sizeof (wchar_t));
|
||||
return __wcsncat_alias (__dest, __src, __n);
|
||||
}
|
||||
|
||||
@ -285,18 +293,18 @@ __fortify_function int
|
||||
__NTH (swprintf (wchar_t *__restrict __s, size_t __n,
|
||||
const wchar_t *__restrict __fmt, ...))
|
||||
{
|
||||
if (__bos (__s) != (size_t) -1 || __USE_FORTIFY_LEVEL > 1)
|
||||
if (__glibc_objsize (__s) != (size_t) -1 || __USE_FORTIFY_LEVEL > 1)
|
||||
return __swprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
|
||||
__bos (__s) / sizeof (wchar_t),
|
||||
__glibc_objsize (__s) / sizeof (wchar_t),
|
||||
__fmt, __va_arg_pack ());
|
||||
return __swprintf_alias (__s, __n, __fmt, __va_arg_pack ());
|
||||
}
|
||||
#elif !defined __cplusplus
|
||||
/* XXX We might want to have support in gcc for swprintf. */
|
||||
# define swprintf(s, n, ...) \
|
||||
(__bos (s) != (size_t) -1 || __USE_FORTIFY_LEVEL > 1 \
|
||||
(__glibc_objsize (s) != (size_t) -1 || __USE_FORTIFY_LEVEL > 1 \
|
||||
? __swprintf_chk (s, n, __USE_FORTIFY_LEVEL - 1, \
|
||||
__bos (s) / sizeof (wchar_t), __VA_ARGS__) \
|
||||
__glibc_objsize (s) / sizeof (wchar_t), __VA_ARGS__) \
|
||||
: swprintf (s, n, __VA_ARGS__))
|
||||
#endif
|
||||
|
||||
@ -315,9 +323,10 @@ __fortify_function int
|
||||
__NTH (vswprintf (wchar_t *__restrict __s, size_t __n,
|
||||
const wchar_t *__restrict __fmt, __gnuc_va_list __ap))
|
||||
{
|
||||
if (__bos (__s) != (size_t) -1 || __USE_FORTIFY_LEVEL > 1)
|
||||
if (__glibc_objsize (__s) != (size_t) -1 || __USE_FORTIFY_LEVEL > 1)
|
||||
return __vswprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
|
||||
__bos (__s) / sizeof (wchar_t), __fmt, __ap);
|
||||
__glibc_objsize (__s) / sizeof (wchar_t), __fmt,
|
||||
__ap);
|
||||
return __vswprintf_alias (__s, __n, __fmt, __ap);
|
||||
}
|
||||
|
||||
@ -383,14 +392,15 @@ extern wchar_t *__REDIRECT (__fgetws_chk_warn,
|
||||
__fortify_function __wur wchar_t *
|
||||
fgetws (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream)
|
||||
{
|
||||
if (__bos (__s) != (size_t) -1)
|
||||
if (__glibc_objsize (__s) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__n) || __n <= 0)
|
||||
return __fgetws_chk (__s, __bos (__s) / sizeof (wchar_t),
|
||||
return __fgetws_chk (__s, __glibc_objsize (__s) / sizeof (wchar_t),
|
||||
__n, __stream);
|
||||
|
||||
if ((size_t) __n > __bos (__s) / sizeof (wchar_t))
|
||||
return __fgetws_chk_warn (__s, __bos (__s) / sizeof (wchar_t),
|
||||
if ((size_t) __n > __glibc_objsize (__s) / sizeof (wchar_t))
|
||||
return __fgetws_chk_warn (__s,
|
||||
__glibc_objsize (__s) / sizeof (wchar_t),
|
||||
__n, __stream);
|
||||
}
|
||||
return __fgetws_alias (__s, __n, __stream);
|
||||
@ -414,14 +424,17 @@ extern wchar_t *__REDIRECT (__fgetws_unlocked_chk_warn,
|
||||
__fortify_function __wur wchar_t *
|
||||
fgetws_unlocked (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream)
|
||||
{
|
||||
if (__bos (__s) != (size_t) -1)
|
||||
if (__glibc_objsize (__s) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__n) || __n <= 0)
|
||||
return __fgetws_unlocked_chk (__s, __bos (__s) / sizeof (wchar_t),
|
||||
return __fgetws_unlocked_chk (__s,
|
||||
__glibc_objsize (__s) / sizeof (wchar_t),
|
||||
__n, __stream);
|
||||
|
||||
if ((size_t) __n > __bos (__s) / sizeof (wchar_t))
|
||||
return __fgetws_unlocked_chk_warn (__s, __bos (__s) / sizeof (wchar_t),
|
||||
if ((size_t) __n > __glibc_objsize (__s) / sizeof (wchar_t))
|
||||
return __fgetws_unlocked_chk_warn (__s,
|
||||
(__glibc_objsize (__s)
|
||||
/ sizeof (wchar_t)),
|
||||
__n, __stream);
|
||||
}
|
||||
return __fgetws_unlocked_alias (__s, __n, __stream);
|
||||
@ -447,8 +460,9 @@ __NTH (wcrtomb (char *__restrict __s, wchar_t __wchar,
|
||||
#if defined MB_LEN_MAX && MB_LEN_MAX != __WCHAR_MB_LEN_MAX
|
||||
# error "Assumed value of MB_LEN_MAX wrong"
|
||||
#endif
|
||||
if (__bos (__s) != (size_t) -1 && __WCHAR_MB_LEN_MAX > __bos (__s))
|
||||
return __wcrtomb_chk (__s, __wchar, __ps, __bos (__s));
|
||||
if (__glibc_objsize (__s) != (size_t) -1
|
||||
&& __WCHAR_MB_LEN_MAX > __glibc_objsize (__s))
|
||||
return __wcrtomb_chk (__s, __wchar, __ps, __glibc_objsize (__s));
|
||||
return __wcrtomb_alias (__s, __wchar, __ps);
|
||||
}
|
||||
|
||||
@ -474,15 +488,16 @@ __fortify_function size_t
|
||||
__NTH (mbsrtowcs (wchar_t *__restrict __dst, const char **__restrict __src,
|
||||
size_t __len, mbstate_t *__restrict __ps))
|
||||
{
|
||||
if (__bos (__dst) != (size_t) -1)
|
||||
if (__glibc_objsize (__dst) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__len))
|
||||
return __mbsrtowcs_chk (__dst, __src, __len, __ps,
|
||||
__bos (__dst) / sizeof (wchar_t));
|
||||
__glibc_objsize (__dst) / sizeof (wchar_t));
|
||||
|
||||
if (__len > __bos (__dst) / sizeof (wchar_t))
|
||||
if (__len > __glibc_objsize (__dst) / sizeof (wchar_t))
|
||||
return __mbsrtowcs_chk_warn (__dst, __src, __len, __ps,
|
||||
__bos (__dst) / sizeof (wchar_t));
|
||||
(__glibc_objsize (__dst)
|
||||
/ sizeof (wchar_t)));
|
||||
}
|
||||
return __mbsrtowcs_alias (__dst, __src, __len, __ps);
|
||||
}
|
||||
@ -508,13 +523,15 @@ __fortify_function size_t
|
||||
__NTH (wcsrtombs (char *__restrict __dst, const wchar_t **__restrict __src,
|
||||
size_t __len, mbstate_t *__restrict __ps))
|
||||
{
|
||||
if (__bos (__dst) != (size_t) -1)
|
||||
if (__glibc_objsize (__dst) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__len))
|
||||
return __wcsrtombs_chk (__dst, __src, __len, __ps, __bos (__dst));
|
||||
return __wcsrtombs_chk (__dst, __src, __len, __ps,
|
||||
__glibc_objsize (__dst));
|
||||
|
||||
if (__len > __bos (__dst))
|
||||
return __wcsrtombs_chk_warn (__dst, __src, __len, __ps, __bos (__dst));
|
||||
if (__len > __glibc_objsize (__dst))
|
||||
return __wcsrtombs_chk_warn (__dst, __src, __len, __ps,
|
||||
__glibc_objsize (__dst));
|
||||
}
|
||||
return __wcsrtombs_alias (__dst, __src, __len, __ps);
|
||||
}
|
||||
@ -542,15 +559,16 @@ __fortify_function size_t
|
||||
__NTH (mbsnrtowcs (wchar_t *__restrict __dst, const char **__restrict __src,
|
||||
size_t __nmc, size_t __len, mbstate_t *__restrict __ps))
|
||||
{
|
||||
if (__bos (__dst) != (size_t) -1)
|
||||
if (__glibc_objsize (__dst) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__len))
|
||||
return __mbsnrtowcs_chk (__dst, __src, __nmc, __len, __ps,
|
||||
__bos (__dst) / sizeof (wchar_t));
|
||||
__glibc_objsize (__dst) / sizeof (wchar_t));
|
||||
|
||||
if (__len > __bos (__dst) / sizeof (wchar_t))
|
||||
if (__len > __glibc_objsize (__dst) / sizeof (wchar_t))
|
||||
return __mbsnrtowcs_chk_warn (__dst, __src, __nmc, __len, __ps,
|
||||
__bos (__dst) / sizeof (wchar_t));
|
||||
(__glibc_objsize (__dst)
|
||||
/ sizeof (wchar_t)));
|
||||
}
|
||||
return __mbsnrtowcs_alias (__dst, __src, __nmc, __len, __ps);
|
||||
}
|
||||
@ -578,15 +596,15 @@ __fortify_function size_t
|
||||
__NTH (wcsnrtombs (char *__restrict __dst, const wchar_t **__restrict __src,
|
||||
size_t __nwc, size_t __len, mbstate_t *__restrict __ps))
|
||||
{
|
||||
if (__bos (__dst) != (size_t) -1)
|
||||
if (__glibc_objsize (__dst) != (size_t) -1)
|
||||
{
|
||||
if (!__builtin_constant_p (__len))
|
||||
return __wcsnrtombs_chk (__dst, __src, __nwc, __len, __ps,
|
||||
__bos (__dst));
|
||||
__glibc_objsize (__dst));
|
||||
|
||||
if (__len > __bos (__dst))
|
||||
if (__len > __glibc_objsize (__dst))
|
||||
return __wcsnrtombs_chk_warn (__dst, __src, __nwc, __len, __ps,
|
||||
__bos (__dst));
|
||||
__glibc_objsize (__dst));
|
||||
}
|
||||
return __wcsnrtombs_alias (__dst, __src, __nwc, __len, __ps);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user