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
_i18n_number.h
_itoa.c
_itowa.c
_itowa.h
asprintf.c
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
bug16.c
bug17.c
bug18.c
bug18a.c
bug19.c
bug19a.c
bug20.c
bug21.c
bug22.c
bug23-2.c
bug23-3.c
bug23-4.c
bug23.c
bug24.c
bug25.c
bug26.c
bug-vfprintf-nargs.c
ctermid.c
cuserid.c
Depend
dprintf.c
errlist.c
errnobug.c
flockfile.c
fprintf.c
fscanf.c
ftrylockfile.c
funlockfile.c
fxprintf.c
gentempfd.c
getline.c
getw.c
isoc99_fscanf.c
isoc99_scanf.c
isoc99_sscanf.c
isoc99_vfscanf.c
isoc99_vscanf.c
isoc99_vsscanf.c
itoa-digits.c
itoa-udigits.c
itowa-digits.c
Makefile Fix scanf rounding of negative floating-point numbers (bug 23280). 2018-06-19 11:52:18 +00:00
perror.c
printf_fp.c
printf_fphex.c
printf_size.c
printf-parse.h
printf-parsemb.c
printf-parsewc.c
printf-prs.c
printf.c
printf.h
psiginfo-data.h
psiginfo-define.h
psiginfo.c
psignal.c
putw.c
reg-modifier.c
reg-printf.c
reg-type.c
remove.c
rename.c
renameat.c
scanf1.c
scanf2.c
scanf3.c
scanf4.c
scanf5.c
scanf7.c
scanf8.c
scanf9.c
scanf10.c
scanf11.c
scanf12.c
scanf12.input
scanf13.c
scanf14.c
scanf15.c
scanf16.c
scanf17.c
scanf.c
siglist.c
snprintf.c
sprintf.c
sscanf.c
stdio_ext.h
stdio_lim.h.in
tempnam.c
tempname.c
temptest.c
test_rdwr.c
test-fseek.c
test-fwrite.c
test-popen.c
test-vfprintf.c
tfformat.c
tiformat.c
tllformat.c
tmpfile64.c
tmpfile.c
tmpnam_r.c
tmpnam.c
tst-cookie.c
tst-fdopen.c
tst-ferror.c
tst-ferror.input
tst-fgets.c
tst-fileno.c
tst-fmemopen2.c
tst-fmemopen3.c
tst-fmemopen4.c
tst-fmemopen.c
tst-fphex-wide.c
tst-fphex.c
tst-fseek.c
tst-fwrite.c
tst-gets.c
tst-gets.input
tst-grouping.c
tst-long-dbl-fphex.c
tst-obprintf.c
tst-perror.c
tst-popen2.c
tst-popen.c
tst-printf-bz18872.sh
tst-printf-round.c
tst-printf.c
tst-printf.sh
tst-printfsz.c
tst-put-error.c
tst-rndseek.c
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
tst-setvbuf1.expect
tst-sprintf2.c
tst-sprintf3.c
tst-sprintf.c
tst-sscanf.c
tst-swprintf.c
tst-swscanf.c
tst-tmpnam.c
tst-unbputc.c
tst-unbputc.sh
tst-ungetc.c
tst-unlockedio.c
tst-vfprintf-mbs-prec.c
tst-vfprintf-user-type.c
tst-vfprintf-width-prec.c
tst-wc-printf.c
tstdiomisc.c
tstgetln.c
tstgetln.input
tstscanf.c
tstscanf.input
Versions
vfprintf.c
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
xbug.c