aboutsummaryrefslogtreecommitdiff
path: root/stdio-common/Makefile
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2018-06-19 11:52:18 +0000
committerJoseph Myers <joseph@codesourcery.com>2018-06-19 11:52:18 +0000
commit646c2833ee84aa5ecc7e219f0cc6156e61c371d3 (patch)
tree1996262927420672f6acf917723309ffecfc7396 /stdio-common/Makefile
parent152fbfb3ad6387051f97248747394d6798b383ba (diff)
downloadglibc-646c2833ee84aa5ecc7e219f0cc6156e61c371d3.zip
glibc-646c2833ee84aa5ecc7e219f0cc6156e61c371d3.tar.gz
glibc-646c2833ee84aa5ecc7e219f0cc6156e61c371d3.tar.bz2
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).
Diffstat (limited to 'stdio-common/Makefile')
-rw-r--r--stdio-common/Makefile2
1 files changed, 2 insertions, 0 deletions
diff --git a/stdio-common/Makefile b/stdio-common/Makefile
index 9dfc115..4503837 100644
--- a/stdio-common/Makefile
+++ b/stdio-common/Makefile
@@ -61,6 +61,7 @@ tests := tstscanf test_rdwr test-popen tstgetln test-fseek \
tst-printf-bz18872 tst-vfprintf-width-prec tst-fmemopen4 \
tst-vfprintf-user-type \
tst-vfprintf-mbs-prec \
+ tst-scanf-round \
test-srcs = tst-unbputc tst-printf
@@ -158,3 +159,4 @@ $(objpfx)tst-setvbuf1-cmp.out: tst-setvbuf1.expect $(objpfx)tst-setvbuf1.out
$(evaluate-test)
$(objpfx)tst-printf-round: $(libm)
+$(objpfx)tst-scanf-round: $(libm)