Zack Weinberg
de6da571ee
Remove some unnecessary redefinitions of std symbols.
...
Two files in stdio-common were unnecessarily redefining some standard
symbols as their _IO_ aliases.
* stdio-common/vfprintf.c: Don't redefine FILE, va_list, or BUFSIZ.
* stdio-common/tstgetln.c: Don't redefine ssize_t.
2018-02-05 19:58:01 -05:00
Joseph Myers
688903eb3e
Update copyright dates with scripts/update-copyrights.
...
* All files with FSF copyright notices: Update copyright dates
using scripts/update-copyrights.
* locale/programs/charmap-kw.h: Regenerated.
* locale/programs/locfile-kw.h: Likewise.
2018-01-01 00:32:25 +00:00
Florian Weimer
d10b132bf5
stdio-common: Use array_length and array_end macros
2017-11-02 12:45:20 +01:00
Florian Weimer
2fa6d086d1
stdio-common: Remove internal_function attribute
2017-08-31 18:52:00 +02:00
Florian Weimer
edc1686af0
vfprintf: Reuse work_buffer in group_number
2017-06-29 09:37:13 +02:00
Florian Weimer
12d5853e22
vfprintf: Use struct scratch_buffer for positional arguments allocation
2017-06-29 09:37:04 +02:00
Florian Weimer
08d01cae60
vfprintf: Reduce WORK_BUFFER_SIZE for wchar_t builds
2017-06-29 09:34:22 +02:00
Gabriel F. T. Gomes
cf2046ec7d
float128: Add strfromf128
...
Add strfromf128 to stdlib when _Float128 support is enabled.
* stdio-common/printf-parsemb.c (__parse_one_specmb): Initialize
spec->info.is_binary128 to zero.
* stdio-common/printf.h (printf_info): Add new member is_binary128
to indicate that the number being converted to string is compatible
with the IEC 60559 binary128 format.
* stdio-common/printf_fp.c (__printf_fp_l): Add code to deal with
_Float128 numbers.
* stdio-common/printf_fphex.c: Include ieee754_float128.h and
ldbl-128/printf_fphex_macros.h
(__printf_fphex): Add code to deal with _Float128 numbers.
* stdio-common/printf_size.c (__printf_size): Likewise.
* stdio-common/vfprintf.c (process_arg): Initialize member
info.is_binary128 to zero.
* stdlib/fpioconst.h (FLT128_MAX_10_EXP_LOG): New macro.
* stdlib/stdlib.h: Include bits/floatn.h for _Float128 support.
(strfromf128): New declaration.
* stdlib/strfrom-skeleton.c (STRFROM): Set member info.is_binary128
to one.
* sysdeps/ieee754/float128/Makefile: Add strfromf128.
* sysdeps/ieee754/float128/Versions: Likewise.
* sysdeps/ieee754/float128/strfromf128.c: New file.
2017-06-07 17:08:21 -03:00
Carlos O'Donell
7224e32d7b
vfprintf.c: Refactor magic number 32 into EXTSIZ.
...
The magic number 32 is used everywhere as extra size to
use when doing certain operations. This commit refactors
that into a macro so you can change this value if you're
debugging something in a local build.
2017-05-08 16:13:16 -04:00
Joseph Myers
bfff8b1bec
Update copyright dates with scripts/update-copyrights.
2017-01-01 00:14:16 +00:00
Florian Weimer
326e288b1e
vfprintf: Avoid creating a VLA which complicates stack management
2016-09-02 15:36:52 +02:00
Florian Weimer
db3476aff1
libio: Implement vtable verification [BZ #20191 ]
...
This commit puts all libio vtables in a dedicated, read-only ELF
section, so that they are consecutive in memory. Before any indirect
jump, the vtable pointer is checked against the section boundaries,
and the process is terminated if the vtable pointer does not fall into
the special ELF section.
To enable backwards compatibility, a special flag variable
(_IO_accept_foreign_vtables), protected by the pointer guard, avoids
process termination if libio stream object constructor functions have
been called earlier. Such constructor functions are called by the GCC
2.95 libstdc++ library, and this mechanism ensures compatibility with
old binaries. Existing callers inside glibc of these functions are
adjusted to call the original functions, not the wrappers which enable
vtable compatiblity.
The compatibility mechanism is used to enable passing FILE * objects
across a static dlopen boundary, too.
2016-06-23 20:01:52 +02:00
Florian Weimer
fdcf1c9480
vfprintf: Fix memory with large width and precision [BZ #19931 ]
...
Free a previously allocated work buffer if it is not large enough.
2016-04-25 14:10:26 +02:00
Joseph Myers
f7a9f785e5
Update copyright dates with scripts/update-copyrights.
2016-01-04 16:05:18 +00:00
Florian Weimer
db8ad8fac3
vfprintf: Rewrite printf_positional to use struct scratch_buffer
2015-10-17 12:05:12 +02:00
Paul Pluzhnikov
560b04462f
Fix BZ #18872 -- memory leak in printf_positional.
2015-09-16 09:16:11 -07:00
Joseph Myers
ec999b8e5e
Move bits/libc-lock.h and bits/libc-lockP.h out of bits/ (bug 14912).
...
It was noted in
<https://sourceware.org/ml/libc-alpha/2012-09/msg00305.html > that the
bits/*.h naming scheme should only be used for installed headers.
This patch renames bits/libc-lock.h to plain libc-lock.h and
bits/libc-lockP.h to plain libc-lockP.h to follow that convention.
Note that I don't know where libc-lockP.h comes from for Hurd (the
Hurd libc-lock.h includes libc-lockP.h, but the only libc-lockP.h in
the glibc source tree is for NPTL) - some unmerged patch? - but I
updated the #include in the Hurd libc-lock.h anyway.
Tested for x86_64 (testsuite, and that installed stripped shared
libraries are unchanged by the patch).
[BZ #14912 ]
* bits/libc-lock.h: Move to ...
* sysdeps/generic/libc-lock.h: ...here.
(_BITS_LIBC_LOCK_H): Rename macro to _LIBC_LOCK_H.
* sysdeps/mach/hurd/bits/libc-lock.h: Move to ...
* sysdeps/mach/hurd/libc-lock.h: ...here.
(_BITS_LIBC_LOCK_H): Rename macro to _LIBC_LOCK_H.
[_LIBC]: Include <libc-lockP.h> instead of <bits/libc-lockP.h>.
* sysdeps/mach/bits/libc-lock.h: Move to ...
* sysdeps/mach/libc-lock.h: ...here.
(_BITS_LIBC_LOCK_H): Rename macro to _LIBC_LOCK_H.
* sysdeps/nptl/bits/libc-lock.h: Move to ...
* sysdeps/nptl/libc-lock.h: ...here.
(_BITS_LIBC_LOCK_H): Rename macro to _LIBC_LOCK_H.
* sysdeps/nptl/bits/libc-lockP.h: Move to ...
* sysdeps/nptl/libc-lockP.h: ...here.
(_BITS_LIBC_LOCKP_H): Rename macro to _LIBC_LOCKP_H.
* crypt/crypt_util.c: Include <libc-lock.h> instead of
<bits/libc-lock.h>.
* dirent/scandir-tail.c: Likewise.
* dlfcn/dlerror.c: Likewise.
* elf/dl-close.c: Likewise.
* elf/dl-iteratephdr.c: Likewise.
* elf/dl-lookup.c: Likewise.
* elf/dl-open.c: Likewise.
* elf/dl-support.c: Likewise.
* elf/dl-writev.h: Likewise.
* elf/rtld.c: Likewise.
* grp/fgetgrent.c: Likewise.
* gshadow/fgetsgent.c: Likewise.
* gshadow/sgetsgent.c: Likewise.
* iconv/gconv_conf.c: Likewise.
* iconv/gconv_db.c: Likewise.
* iconv/gconv_dl.c: Likewise.
* iconv/gconv_int.h: Likewise.
* iconv/gconv_trans.c: Likewise.
* include/link.h: Likewise.
* inet/getnameinfo.c: Likewise.
* inet/getnetgrent.c: Likewise.
* inet/getnetgrent_r.c: Likewise.
* intl/bindtextdom.c: Likewise.
* intl/dcigettext.c: Likewise.
* intl/finddomain.c: Likewise.
* intl/gettextP.h: Likewise.
* intl/loadmsgcat.c: Likewise.
* intl/localealias.c: Likewise.
* intl/textdomain.c: Likewise.
* libidn/idn-stub.c: Likewise.
* libio/libioP.h: Likewise.
* locale/duplocale.c: Likewise.
* locale/freelocale.c: Likewise.
* locale/newlocale.c: Likewise.
* locale/setlocale.c: Likewise.
* login/getutent_r.c: Likewise.
* login/getutid_r.c: Likewise.
* login/getutline_r.c: Likewise.
* login/utmp-private.h: Likewise.
* login/utmpname.c: Likewise.
* malloc/mtrace.c: Likewise.
* misc/efgcvt.c: Likewise.
* misc/error.c: Likewise.
* misc/fstab.c: Likewise.
* misc/getpass.c: Likewise.
* misc/mntent.c: Likewise.
* misc/syslog.c: Likewise.
* nis/nis_call.c: Likewise.
* nis/nis_callback.c: Likewise.
* nis/nss-default.c: Likewise.
* nis/nss_compat/compat-grp.c: Likewise.
* nis/nss_compat/compat-initgroups.c: Likewise.
* nis/nss_compat/compat-pwd.c: Likewise.
* nis/nss_compat/compat-spwd.c: Likewise.
* nis/nss_nis/nis-alias.c: Likewise.
* nis/nss_nis/nis-ethers.c: Likewise.
* nis/nss_nis/nis-grp.c: Likewise.
* nis/nss_nis/nis-hosts.c: Likewise.
* nis/nss_nis/nis-network.c: Likewise.
* nis/nss_nis/nis-proto.c: Likewise.
* nis/nss_nis/nis-pwd.c: Likewise.
* nis/nss_nis/nis-rpc.c: Likewise.
* nis/nss_nis/nis-service.c: Likewise.
* nis/nss_nis/nis-spwd.c: Likewise.
* nis/nss_nisplus/nisplus-alias.c: Likewise.
* nis/nss_nisplus/nisplus-ethers.c: Likewise.
* nis/nss_nisplus/nisplus-grp.c: Likewise.
* nis/nss_nisplus/nisplus-hosts.c: Likewise.
* nis/nss_nisplus/nisplus-initgroups.c: Likewise.
* nis/nss_nisplus/nisplus-network.c: Likewise.
* nis/nss_nisplus/nisplus-proto.c: Likewise.
* nis/nss_nisplus/nisplus-pwd.c: Likewise.
* nis/nss_nisplus/nisplus-rpc.c: Likewise.
* nis/nss_nisplus/nisplus-service.c: Likewise.
* nis/nss_nisplus/nisplus-spwd.c: Likewise.
* nis/ypclnt.c: Likewise.
* nptl/libc_pthread_init.c: Likewise.
* nss/getXXbyYY.c: Likewise.
* nss/getXXent.c: Likewise.
* nss/getXXent_r.c: Likewise.
* nss/nss_db/db-XXX.c: Likewise.
* nss/nss_db/db-netgrp.c: Likewise.
* nss/nss_db/nss_db.h: Likewise.
* nss/nss_files/files-XXX.c: Likewise.
* nss/nss_files/files-alias.c: Likewise.
* nss/nsswitch.c: Likewise.
* posix/regex_internal.h: Likewise.
* posix/wordexp.c: Likewise.
* pwd/fgetpwent.c: Likewise.
* resolv/res_hconf.c: Likewise.
* resolv/res_libc.c: Likewise.
* shadow/fgetspent.c: Likewise.
* shadow/lckpwdf.c: Likewise.
* shadow/sgetspent.c: Likewise.
* socket/opensock.c: Likewise.
* stdio-common/reg-modifier.c: Likewise.
* stdio-common/reg-printf.c: Likewise.
* stdio-common/reg-type.c: Likewise.
* stdio-common/vfprintf.c: Likewise.
* stdio-common/vfscanf.c: Likewise.
* stdlib/abort.c: Likewise.
* stdlib/cxa_atexit.c: Likewise.
* stdlib/fmtmsg.c: Likewise.
* stdlib/random.c: Likewise.
* stdlib/setenv.c: Likewise.
* string/strsignal.c: Likewise.
* sunrpc/auth_none.c: Likewise.
* sunrpc/bindrsvprt.c: Likewise.
* sunrpc/create_xid.c: Likewise.
* sunrpc/key_call.c: Likewise.
* sunrpc/rpc_thread.c: Likewise.
* sysdeps/arm/backtrace.c: Likewise.
* sysdeps/generic/ldsodefs.h: Likewise.
* sysdeps/generic/stdio-lock.h: Likewise.
* sysdeps/generic/unwind-dw2-fde.c: Likewise.
* sysdeps/i386/backtrace.c: Likewise.
* sysdeps/ieee754/ldbl-opt/nldbl-compat.c: Likewise.
* sysdeps/m68k/backtrace.c: Likewise.
* sysdeps/mach/hurd/cthreads.c: Likewise.
* sysdeps/mach/hurd/dirstream.h: Likewise.
* sysdeps/mach/hurd/malloc-machine.h: Likewise.
* sysdeps/nptl/malloc-machine.h: Likewise.
* sysdeps/nptl/stdio-lock.h: Likewise.
* sysdeps/posix/dirstream.h: Likewise.
* sysdeps/posix/getaddrinfo.c: Likewise.
* sysdeps/posix/system.c: Likewise.
* sysdeps/pthread/aio_suspend.c: Likewise.
* sysdeps/s390/s390-32/backtrace.c: Likewise.
* sysdeps/s390/s390-64/backtrace.c: Likewise.
* sysdeps/unix/sysv/linux/check_pf.c: Likewise.
* sysdeps/unix/sysv/linux/if_index.c: Likewise.
* sysdeps/unix/sysv/linux/s390/s390-32/getutent_r.c: Likewise.
* sysdeps/unix/sysv/linux/s390/s390-32/getutid_r.c: Likewise.
* sysdeps/unix/sysv/linux/s390/s390-32/getutline_r.c: Likewise.
* sysdeps/unix/sysv/linux/shm-directory.c: Likewise.
* sysdeps/unix/sysv/linux/system.c: Likewise.
* sysdeps/x86_64/backtrace.c: Likewise.
* time/alt_digit.c: Likewise.
* time/era.c: Likewise.
* time/tzset.c: Likewise.
* wcsmbs/wcsmbsload.c: Likewise.
* nptl/tst-initializers1.c (do_test): Refer to <libc-lock.h>
instead of <bits/libc-lock.h> in comment.
2015-09-08 21:11:03 +00:00
Florian Weimer
0f87de79e9
vfprintf: Remove label name switching for the jump table
...
Different labels are no longer needed because the tables are now in
separate functions.
2015-05-21 16:48:46 +02:00
Florian Weimer
f8194fa6f9
vfprintf: Introduce printf_positional function
...
This splits a considerable chunk of code from the main vfprintf
function. This will make it easier to remove the use of extend_alloca
from the positional argument handling code.
2015-05-21 16:46:46 +02:00
Florian Weimer
f0f98189d8
vfprintf: Move jump table definition and the macros out of function
...
The second jump table will be moved to a separate function
in the next commit.
2015-05-21 16:45:09 +02:00
Florian Weimer
1597b7447a
vfprintf: Define WORK_BUFFER_SIZE
...
This constant will allow us to refer to the number of elements in
work_buffer across a function call boundary.
2015-03-06 11:06:33 +01:00
Florian Weimer
627e7a5f5b
vfprintf: Introduce JUMP_TABLE_BASE_LABEL
...
This makes the offset handling more explicit and avoids
cross-references between the jump tables.
2015-03-06 10:29:49 +01:00
Florian Weimer
d176a41a62
vfprintf: Introduce THOUSANDS_SEP_T
...
This avoids preprocessor conditionals in function declarations.
2015-03-06 10:26:58 +01:00
Joseph Myers
b168057aaa
Update copyright dates with scripts/update-copyrights.
2015-01-02 16:29:47 +00:00
Jeff Law
a5357b7ce2
CVE-2012-3406: Stack overflow in vfprintf [BZ #16617 ]
...
A larger number of format specifiers coudld cause a stack overflow,
potentially allowing to bypass _FORTIFY_SOURCE format string
protection.
2014-12-15 10:09:33 +01:00
Andreas Schwab
4fdfe821e2
Correctly handle %p in wprintf (BZ #16890 )
2014-05-01 20:42:08 +02:00
Will Newton
c15cf13a8a
Revert "Fix _IO_JUMPS_OFFSET -Wundef warnings"
...
This reverts commit f7efd7c3df
.
2014-03-17 20:37:42 +00:00
Will Newton
f7efd7c3df
Fix _IO_JUMPS_OFFSET -Wundef warnings
...
ChangeLog:
2014-03-17 Will Newton <will.newton@linaro.org>
* libio/genops.c: Check whether
_IO_JUMPS_OFFSET is defined with #ifdef rather
than #if.
* libio/libioP.h: Likewise.
* stdio-common/vfprintf.c: Likewise.
2014-03-17 16:05:23 +00:00
Ondřej Bílka
94c8a4bc57
Fix integer overflow in vfwprintf. Fixes bug 14286.
2014-01-07 12:05:32 +01:00
Allan McRae
d4697bc93d
Update copyright notices with scripts/update-copyrights
2014-01-01 22:00:23 +10:00
Eric Biggers
3d110c7c6e
Fix fwrite() reading beyond end of buffer in error path
...
Partially revert commits 2b766585f9
and
de2fd463b1
, which were intended to fix BZ#11741
but caused another, likely worse bug, namely that fwrite() and fputs() could,
in an error path, read data beyond the end of the specified buffer, and
potentially even write this data to the file.
Fix BZ#11741 properly by checking the return value from _IO_padn() in
stdio-common/vfprintf.c.
2013-10-11 22:29:38 +05:30
Joseph Myers
2e09a79ada
Avoid use of "register" as optimization hint.
2013-06-07 22:24:35 +00:00
Paul Pluzhnikov
e1b42695ea
Replace __builtin_expect(..., 0) with __glibc_unlikely().
2013-03-05 21:38:19 -08:00
Paul Pluzhnikov
cdcf361fda
* stdio-common/vfprintf.c (vfprintf): Check malloc return; don't
...
call free(NULL).
2013-03-05 13:44:33 -08:00
Joseph Myers
70d9946a44
Remove __ptrvalue, __bounded and __unbounded.
2013-02-13 23:30:40 +00:00
Joseph Myers
568035b787
Update copyright notices with scripts/update-copyrights.
2013-01-02 19:05:09 +00:00
Siddhesh Poyarekar
2b766585f9
printf should return negative value on error
...
[BZ #11741 ]
Fixed bug where printf and family may return a spurious success when
printing padded formats.
2012-11-16 19:13:11 +05:30
Jeff Law
715a900c90
2012-09-28 Andreas Schwab <schwab@linux-m68k.org>
...
[BZ #6530 ]
* stdio-common/vfprintf.c (process_string_arg): Revert
2000-07-22 change.
2011-09-28 Jonathan Nieder <jrnieder@gmail.com>
* stdio-common/Makefile (tst-sprintf-ENV): Set environment
for testcase.
* stdio-common/tst-sprintf.c: Include <locale.h>
(main): Test sprintf's handling of incomplete multibyte
characters.
2012-09-28 12:49:51 -06:00
Andreas Schwab
d18ea0c5e6
Remove use of INTDEF/INTUSE in libio
2012-05-24 23:06:20 +02:00
David S. Miller
135ffda8b8
Tighten up vfprintf width, precision, and total length overflow handling.
...
With help from Paul Eggert, Carlos O'Donell, and Roland McGrath.
* stdio-common/printf-parse.h (read_int): Change return type to
'int', return -1 on INT_MAX overflow.
* stdio-common/vfprintf.c (vfprintf): Validate width and precision
against overflow of INT_MAX. Set errno to EOVERFLOW when 'done'
overflows INT_MAX. Check for overflow of in-format-string precision
values properly. Use EOVERFLOW rather than ERANGE throughout. Use
SIZE_MAX not INT_MAX for integer overflow test.
* stdio-common/printf-parsemb.c: If read_int signals an overflow,
skip the construct in the format string but do not record anything.
* stdio-common/bug22.c: Adjust to test both width/prevision
INT_MAX overflow as well as total length INT_MAX overflow. Check
explicitly for proper errno values.
2012-04-02 14:31:19 -07:00
H.J. Lu
eb96ffb07d
Move stdio-common/_itoa.h to sysdeps/generic
2012-03-20 16:00:23 -07:00
Ulrich Drepper
f72ed77d71
Formatting fixes
2012-03-06 21:45:53 -05:00
Kees Cook
fa0355175d
2012-03-02 Kees Cook <keescook@chromium.org>
...
* stdio-common/vfprintf.c (vfprintf): add missing errno settings.
2012-03-05 10:18:17 +01:00
Kees Cook
7c1f4834d3
2012-03-02 Kees Cook <keescook@chromium.org>
...
[BZ #13656 ]
* stdio-common/vfprintf.c (vfprintf): Check for nargs overflow and
possibly allocate from heap instead of stack.
* stdio-common/bug-vfprintf-nargs.c: New file.
* stdio-common/Makefile (tests): Add nargs overflow test.
2012-03-05 10:17:22 +01:00
Paul Eggert
59ba27a63a
Replace FSF snail mail address with URLs.
2012-02-09 23:18:22 +00:00
Ulrich Drepper
a4647e727a
Fix extension of array in extended printf format handling
2011-12-17 21:27:25 -05:00
Ulrich Drepper
aec84f5395
Set stream errors in more cases
...
Also avoid unnecessarily setting errno when testing for TTY.
2011-05-21 00:42:06 -04:00
Petr Baudis
84a4211850
Fix allocation when handling positional parameters in printf.
2011-02-20 07:59:49 -05:00
Ulrich Drepper
07eb4b716e
Always allow overwriting printf modifiers etc.
2010-12-24 19:28:32 -05:00
Andreas Schwab
199eb0de8d
Check for integer overflows in formatting functions
2009-09-29 06:11:59 -07:00