glibc/stdio-common
Joseph Myers 646c2833ee Fix scanf rounding of negative floating-point numbers (bug 23280).
As reported in bug 23280, scanf functions produce incorrectly rounded
result for floating-point formats in FE_UPWARD and FE_DOWNWARD modes,
because they pass the input with sign removed to strtod functions, and
then negate the result if there was a '-' at the start of the input.

This patch fixes this by arranging for the sign to be passed to strtod
rather than scanf doing the negation itself.  In turn, keeping the
sign around in the buffer being built up for strtod requires updating
places that examine char_buffer_size (&charbuf) to allow for the sign
being there as an extra character.

Tested for x86_64.

	[BZ #23280]
	* stdio-common/vfscanf.c (_IO_vfscanf_internal): Pass sign of
	floating-point number to strtod functions rather than possibly
	negating result of those functions.
	* stdio-common/tst-scanf-round.c: New file.
	* stdio-common/Makefile (tests): Add tst-scanf-round.
	($(objpfx)tst-scanf-round): Depend on $(libm).
2018-06-19 11:52:18 +00:00
..
bits Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
Depend
Makefile Fix scanf rounding of negative floating-point numbers (bug 23280). 2018-06-19 11:52:18 +00:00
Versions Fix crypt snprintf namespace (bug 20829). 2016-11-16 22:46:48 +00:00
_i18n_number.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
_itoa.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
_itowa.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
_itowa.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
asprintf.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
bug-vfprintf-nargs.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
bug1.c
bug1.input
bug2.c
bug3.c
bug4.c
bug5.c
bug6.c
bug6.input
bug7.c
bug8.c
bug9.c
bug10.c
bug11.c
bug12.c
bug13.c
bug14.c Update. 2003-01-28 07:32:19 +00:00
bug16.c stdio-common: Use array_length and array_end macros 2017-11-02 12:45:20 +01:00
bug17.c [BZ #3902] 2007-01-22 16:18:03 +00:00
bug18.c * libio/wstrops.c (_IO_wstr_underflow): Clear errno before 2007-07-07 21:38:43 +00:00
bug18a.c * libio/wstrops.c (_IO_wstr_underflow): Clear errno before 2007-07-07 21:38:43 +00:00
bug19.c * stdio-common/vfscanf.c (_IO_vfscanf): Add additional test for EOF 2007-07-08 04:41:34 +00:00
bug19a.c * stdio-common/vfscanf.c (_IO_vfscanf): Add additional test for EOF 2007-07-08 04:41:34 +00:00
bug20.c * stdio-common/Makefile (tests): Add bug20. 2007-10-28 16:45:27 +00:00
bug21.c Split DIAG_* macros to new header libc-diag.h. 2017-02-25 09:59:46 -05:00
bug22.c Bump up stdio bug22 timeout from 30 seconds to 60 seconds 2012-05-17 12:59:08 -04:00
bug23-2.c CVE-2012-3406: Stack overflow in vfprintf [BZ #16617] 2014-12-15 10:09:33 +01:00
bug23-3.c CVE-2012-3406: Stack overflow in vfprintf [BZ #16617] 2014-12-15 10:09:33 +01:00
bug23-4.c CVE-2012-3406: Stack overflow in vfprintf [BZ #16617] 2014-12-15 10:09:33 +01:00
bug23.c Fix allocation when handling positional parameters in printf. 2011-02-20 07:59:49 -05:00
bug24.c Add test for BZ 13114 2011-08-20 09:22:16 -04:00
bug25.c Another round of inclusion fixes for _ISOMAC testsuite. 2017-03-22 08:44:32 -04:00
bug26.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
ctermid.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
cuserid.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
dprintf.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
errlist.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
errnobug.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
flockfile.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
fprintf.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
fscanf.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
ftrylockfile.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
funlockfile.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
fxprintf.c Mechanically remove _IO_ name aliases for types and constants. 2018-02-21 14:11:05 -05:00
gentempfd.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
getline.c Mechanically remove _IO_ name aliases for types and constants. 2018-02-21 14:11:05 -05:00
getw.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
isoc99_fscanf.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
isoc99_scanf.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
isoc99_sscanf.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
isoc99_vfscanf.c Mechanically remove _IO_ name aliases for types and constants. 2018-02-21 14:11:05 -05:00
isoc99_vscanf.c Mechanically remove _IO_ name aliases for types and constants. 2018-02-21 14:11:05 -05:00
isoc99_vsscanf.c Mechanically remove _IO_ name aliases for types and constants. 2018-02-21 14:11:05 -05:00
itoa-digits.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
itoa-udigits.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
itowa-digits.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
perror.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
printf-parse.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
printf-parsemb.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
printf-parsewc.c Update. 2003-06-11 23:22:36 +00:00
printf-prs.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
printf.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
printf.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
printf_fp.c Mechanically remove _IO_ name aliases for types and constants. 2018-02-21 14:11:05 -05:00
printf_fphex.c Mechanically remove _IO_ name aliases for types and constants. 2018-02-21 14:11:05 -05:00
printf_size.c Mechanically remove _IO_ name aliases for types and constants. 2018-02-21 14:11:05 -05:00
psiginfo-data.h Fix typos. 2013-10-12 14:47:50 +02:00
psiginfo-define.h * locale/langinfo.h: nl_langinfo_l is in POSIX 2008. 2009-02-26 06:18:24 +00:00
psiginfo.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
psignal.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
putw.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
reg-modifier.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
reg-printf.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
reg-type.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
remove.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
rename.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
renameat.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
scanf.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
scanf1.c
scanf2.c
scanf3.c
scanf4.c Split DIAG_* macros to new header libc-diag.h. 2017-02-25 09:59:46 -05:00
scanf5.c
scanf7.c Split DIAG_* macros to new header libc-diag.h. 2017-02-25 09:59:46 -05:00
scanf8.c
scanf9.c
scanf10.c
scanf11.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
scanf12.c
scanf12.input
scanf13.c Avoid warning in scanf test. 2009-10-30 09:23:24 -07:00
scanf14.c Split DIAG_* macros to new header libc-diag.h. 2017-02-25 09:59:46 -05:00
scanf15.c Don't include <bits/stdio-lock.h> from installed <libio.h>. 2015-09-03 20:24:54 +00:00
scanf16.c * libio/stdio.h (vscanf): Fix -std=c99 redirect. 2008-05-24 18:14:36 +00:00
scanf17.c Don't include <bits/stdio-lock.h> from installed <libio.h>. 2015-09-03 20:24:54 +00:00
siglist.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
snprintf.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
sprintf.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
sscanf.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
stdio_ext.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
stdio_lim.h.in Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tempnam.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tempname.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
temptest.c
test-fseek.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
test-fwrite.c Modify several tests to use test-skeleton.c 2015-08-06 02:59:04 -04:00
test-popen.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
test-vfprintf.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
test_rdwr.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tfformat.c Avoid use of "register" as optimization hint. 2013-06-07 22:24:35 +00:00
tiformat.c
tllformat.c
tmpfile.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tmpfile64.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tmpnam.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tmpnam_r.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-cookie.c Modify several tests to use test-skeleton.c 2014-11-05 15:24:08 +05:30
tst-fdopen.c Update. 2002-12-17 10:34:02 +00:00
tst-ferror.c Modify several tests to use test-skeleton.c 2015-08-06 02:59:04 -04:00
tst-ferror.input
tst-fgets.c Prefer https for Sourceware links 2017-11-16 11:49:26 +05:30
tst-fileno.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-fmemopen.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-fmemopen2.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-fmemopen3.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-fmemopen4.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-fphex-wide.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-fphex.c stdio-common: Use array_length and array_end macros 2017-11-02 12:45:20 +01:00
tst-fseek.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-fwrite.c Prefer https for Sourceware links 2017-11-16 11:49:26 +05:30
tst-gets.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-gets.input
tst-grouping.c Fix grouping when rounding increases number of integer digits. 2011-01-12 20:37:51 -05:00
tst-long-dbl-fphex.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-obprintf.c Modify several tests to use test-skeleton.c 2014-11-05 15:24:08 +05:30
tst-perror.c Modify several tests to use test-skeleton.c 2014-11-05 15:24:08 +05:30
tst-popen.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-popen2.c * libio/iopopen.c (_IO_new_proc_open): Don't close child_std_end 2007-07-19 17:03:08 +00:00
tst-printf-bz18872.sh Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-printf-round.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-printf.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-printf.sh Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-printfsz.c Split DIAG_* macros to new header libc-diag.h. 2017-02-25 09:59:46 -05:00
tst-put-error.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-rndseek.c 2002-10-12 Roland McGrath <roland@redhat.com> 2002-10-12 18:45:26 +00:00
tst-scanf-round.c Fix scanf rounding of negative floating-point numbers (bug 23280). 2018-06-19 11:52:18 +00:00
tst-setvbuf1.c * stdio-common/Makefile: Add rules to build and run tst-setvbuf1. 2008-07-08 16:32:55 +00:00
tst-setvbuf1.expect * stdio-common/Makefile: Add rules to build and run tst-setvbuf1. 2008-07-08 16:32:55 +00:00
tst-sprintf.c Split DIAG_* macros to new header libc-diag.h. 2017-02-25 09:59:46 -05:00
tst-sprintf2.c Modify several tests to use test-skeleton.c 2014-11-05 15:24:08 +05:30
tst-sprintf3.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-sscanf.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-swprintf.c stdio-common: Use array_length and array_end macros 2017-11-02 12:45:20 +01:00
tst-swscanf.c * stdio-common/Makefile (tests): Add tst-swscanf. 2007-02-18 09:21:24 +00:00
tst-tmpnam.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-unbputc.c Modify several tests to use test-skeleton.c 2014-11-05 15:24:08 +05:30
tst-unbputc.sh Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-ungetc.c Update. 2002-12-19 09:18:01 +00:00
tst-unlockedio.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-vfprintf-mbs-prec.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-vfprintf-user-type.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-vfprintf-width-prec.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-wc-printf.c Modify several tests to use test-skeleton.c 2014-11-05 15:24:08 +05:30
tstdiomisc.c stdio-common: Use array_length and array_end macros 2017-11-02 12:45:20 +01:00
tstgetln.c Remove some unnecessary redefinitions of std symbols. 2018-02-05 19:58:01 -05:00
tstgetln.input
tstscanf.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tstscanf.input
vfprintf.c Remove miscellaneous debris from libio. 2018-02-21 14:39:54 -05:00
vfscanf.c Fix scanf rounding of negative floating-point numbers (bug 23280). 2018-06-19 11:52:18 +00:00
vfwprintf.c
vfwscanf.c
vprintf.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
xbug.c Convert 703 function definitions to prototype style. 2015-10-16 20:21:49 +00:00