Commit Graph

185 Commits

Author SHA1 Message Date
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
Ulrich Drepper
9d26efa90c * stdio-common/printf.h (struct printf_info): Add user element.
New types printf_arginfo_size_function, printf_va_arg_function.
	Declare register_printf_specifier, register_printf_modifier,
	register_printf_type.
	* stdio-common/printf-parse.h (struct printf_spec): Add size element.
	(union printf_arg): Add pa_user element.
	Adjust __printf_arginfo_table type.
	Add __printf_va_arg_table, __printf_modifier_table,
	__handle_registered_modifier_mb, and __handle_registered_modifier_wc
	declarations.
	* stdio-common/printf-parsemb.c: Recognize registered modifiers.
	If registered arginfo call failed try normal specifier.
	* stdio-common/printf-prs.c: Pass additional parameter to arginfo
	function.
	* stdio-common/Makefile (routines): Add reg-modifier and reg-type.
	* stdio-common/Versions: Export register_printf_modifier,
	register_printf_type, and register_printf_specifier for GLIBC_2.10.
	* stdio-common/reg-modifier.c: New file.
	* stdio-common/reg-type.c: New file.
	* stdio-common/reg-printf.c (__register_printf_specifier): New
	function.  Mostly the old __register_printf_function function but
	uses locking and type of third parameter changed.
	(__register_printf_function): Implement using
	__register_printf_specifier.
	* stdio-common/vfprintf.c (vfprintf): Collect argument sizes in
	calls to arginfo functions.  Allocate enough memory for user-defined
	types.  Call new va_arg functions to get user-defined types.
	Try installed handlers even for existing format specifiers first.
2009-04-11 05:34:20 +00:00
Ulrich Drepper
1d498daa95 Simplified code and possible copy problem fixed. 2009-04-10 03:56:06 +00:00
Ulrich Drepper
e9b4d069c1 * stdio-common/vfprintf.c (vfprintf): Slightly more compact code. 2009-04-10 02:51:29 +00:00
Ulrich Drepper
3703468e36 [BZ #6698]
* stdio-common/_i18n_number.h (_i18n_number_rewrite): Take additional
	parameter for end of buffer.  If temporary copy is too large use
	malloc.
	* stdio-common/vfprintf.c: Adjust for _i18n_number_rewrite
	interface change.
	* stdio-common/printf_fp.c (__printf_fp): Likewise..  Account for
	string rewrite when allocating buffer.
2008-07-25 23:39:16 +00:00
Ulrich Drepper
9f558b8051 * locale/setlocale.c (setlocale): Take the setlocale lock earlier. 2008-07-20 08:49:18 +00:00
Ulrich Drepper
2486b4965b * stdio-common/vfprintf.c (_IO_helper_overflow): In case _IO_sputn
doesn't manage to write anything, fail.
2008-07-15 18:13:22 +00:00
Ulrich Drepper
43f6bec195 * stdio-common/vfprintf.c (vfprintf): Correct overflow test. 2008-03-30 05:39:35 +00:00
Ulrich Drepper
b4354cf420 [BZ #5424, BZ #5428, BZ #5451]
2007-12-08  Ulrich Drepper  <drepper@redhat.com>
	[BZ #5424]
	* stdio-common/vfprintf.c: Do not overflow when adding to done.
	* stdio-common/Makefile (tests): Add bug22.
	* stdio-common/bug22.c: New file.

	[BZ #5451]
	* time/getdate.c: Fix filling in default values.
	* time/bug-getdate1.c: New file.
	* time/Makefile: Add rules to build and run bug-getdate1.

	* iconvdata/ebcdic-is-friss.c: Use 8bit-gap instead of 8bit-generic.
	* iconvdata/ebcdic-es.c: Likewise.
	* iconvdata/ebcdic-es-a.c: Likewise.
	* iconvdata/ebcdic-uk.c: Likewise.
	* iconvdata/iso8859-16.c: Likewise.
	* iconvdata/viscii.c: Likewise.
	* iconvdata/iso8859-9e.c: Likewise.
	* iconvdata/Makefile: Adjust appropriately.

	[BZ #5428]
	* wcsmbs/wchar.h: Unconditionally undefine __need_mbstate and
	__need_wint_t.

	* iconvdata/gconv-modules: Likewise.
2007-12-10 01:43:40 +00:00
Ulrich Drepper
9ca230d62f * stdio-common/vfprintf.c (vfprintf): Compute necessary buffer size
with size_t type.
	* stdio-common/printf_fp.c (__print_fp): Change chars_needed type to
	size_t.  Add casts where needed.
2007-11-06 21:38:49 +00:00
Ulrich Drepper
c06b7169e4 * stdio-common/printf-parse.h: Include string.h and wchar.h.
(__find_specwc): Change into __extern_always_inline function.
	(__find_specmb): Likewise.  Remove ps argument.  Use __strchrnul.
	(__parse_one_specmb): Remove ps argument.
	* stdio-common/vfprintf.c (vfprintf): Remove mbstate variable.
	Adjust __find_specmb and __parse_one_specmb callers.
	* stdio-common/printf-prs.c (parse_printf_format): Likewise.
	* stdio-common/printf-parsemb.c (__find_specwc, __find_specmb):
	Removed.
	(__parse_one_specmb): Remove ps argument, adjust __find_specmb
	caller.
2007-10-10 20:14:12 +00:00
Ulrich Drepper
701666b77d * nss/nsswitch.c (__nss_lookup_function): Don't cast &ni->known to
void **.
	* nss/nsswitch.h (service_user): Use void * type for KNOWN field.

	* nss/nss_files/files-hosts.c (LINE_PARSER): Cast host_addr to
	char * to avoid warning.
	* nis/nss_nis/nis-hosts.c (LINE_PARSER): Likewise.

	* timezone/Makefile (CFLAGS-zdump.c): Add -fwrapv.

	* locale/programs/ld-ctype.c (ctype_finish, set_class_defaults,
	allocate_arrays): Cast second argument to charmap_find_symbol
	to char * to avoid warnings.

	* locale/programs/repertoire.c (repertoire_new_char): Change
	from_nr, to_nr and cnt to unsigned long, adjust printf format
	string.

	* locale/programs/ld-collate.c (insert_value, handle_ellipsis):
	Cast second argument to new_element to char * to avoid warnings.

	* locale/weightwc.h (findidx): Cast &extra[-i] to const int32_t *.

	* intl/gettextP.h (struct loaded_domain): Change plural to const
	struct expression *.
	* intl/plural-eval.c (plural_eval): Change first argument to
	const struct expression *.
	* intl/plural-exp.c (EXTRACT_PLURAL_EXPRESSION): Change first
	argument to const struct expression **.
	* intl/plural-exp.h (EXTRACT_PLURAL_EXPRESSION, plural_eval): Adjust
	prototypes.
	* intl/loadmsgcat (_nl_unload_domain): Cast away const
	in call to __gettext_free_exp.

	* posix/fnmatch.c (fnmatch): Rearrange code to avoid maybe
	unitialized wstring/wpattern var warnings.

	* posix/runtests.c (struct a_test): Make data field const char *.

	* stdio-common/tst-sprintf2.c (main): Don't declere u, v and buf
	vars if not LDBL_MANT_DIG >= 106.

	* stdio-common/Makefile (CFLAGS-vfwprintf.c): Add -Wno-unitialized.

	* stdio-common/vfprintf.c (vfprintf): Cast first arugment to
	__find_specmb to avoid warning.

	* rt/tst-mqueue1.c (do_one_test): Add casts to avoid warnings.

	* debug/test-strcpy_chk.c (do_tests, do_random_tests): Add casts
	to avoid warnings.

	* sysdeps/ieee754/ldbl-96/s_roundl.c (huge): Add L suffix to
	initializer.

	* sysdeps/unix/clock_gettime.c (clock_gettime): Only define
	tv var when it will be actually used.

	* sunrpc/rpc_cmsg.c (xdr_callmsg): Cast IXDR_PUT_* to void
	to avoid warnings.
2007-07-28 20:36:21 +00:00
Ulrich Drepper
af269dd954 [BZ #4514]
* stdio-common/vfprintf.c (vfprintf): Don't shadow workstart variable,
	reinitialize workend at the start of each do_positional format spec
	loop, free workstart before do_positional loops.
	(printf_unknown): Fix size of work_buffer.
	* stdio-common/tst-sprintf.c (main): Add 3 new testcases.
2007-05-21 18:23:50 +00:00
Ulrich Drepper
49a8eb75eb * stdio-common/vfprintf.c (process_string_arg): Optimize
ridiculous precision in wide char code printing multi-byte string.
	Reported by Jim Meyering <jim@meyering.net>.
2007-05-07 03:44:48 +00:00
Ulrich Drepper
30b323ab4e * stdio-common/vfprintf.c (process_string_arg): Adjust call to
__mbsnrtowcs after last change.
2007-05-05 04:41:44 +00:00
Ulrich Drepper
57433edee3 * stdio-common/vfprintf.c (process_string_arg): Use a VLA rather than
fixed length array for ignore.
2007-05-02 08:16:34 +00:00
Ulrich Drepper
c01c245517 [BZ #4438]
2007-04-30  Ulrich Drepper  <drepper@redhat.com>
	[BZ #4438]
	* stdio-common/vfprintf.c (process_string_arg): Don't overflow the
	stack for large precisions.
2007-05-01 04:11:51 +00:00
Ulrich Drepper
965cba048c * elf/dl-open.c (dl_open_worker): Declare l in 2 different
smaller scopes.
	* elf/dl-dst.h (DL_DST_REQ_STATIC): Add l as macro argument.
	(DL_DST_REQUIRED): Adjust user.

	* include/dlfcn.h (struct link_map): New forward decl.

	* inet/getnameinfo.c: Include stddef.h.
	(getnameinfo): Use offsetof.

	* time/tst-mktime2.c (do_test): Don't rely on signed wrap.

	* stdio-common/vfprintf.c (_itoa): Undef before redefining.

	* string/strerror_l.c: Include stdlib.h.
2007-03-17 17:09:13 +00:00