freebsd-dev/lib/libc/stdio
Poul-Henning Kamp b384108ed6 /* You're not supposed to hit this problem */
For some denormalized long double values, a bug in __hldtoa() (called
from *printf()'s %A format) results in a base 16 digit being rounded
up from 0xf to 0x10.

When this digit is subsequently converted to string format, an index
of 10 reaches past the end of the uppper-case hex/char array, picking
up whatever the code segment happen to contain at that address.

This mostly seem to be some character from the upper half of the
byte range.

When using the %a format instead of %A, the first character past
the end of the lowercase hex/char table happens to be index 0 in
the uppercase hex/char table hextable and therefore the string
representation features a '0', which is supposedly correct.

This leads me to belive that the proper fix _may_ be as simple as
masking all but the lower four bits off after incrementing a hex-digit
in libc/gdtoa/_hdtoa.c:roundup().  I worry however that the upper
bit in 0x10 indicates a carry not carried.

Until das@ or bde@ finds time to visit this issue, extend the
hexdigit arrays with a 17th index containing '?' so that we get a
invalid but consistent and printable output in both %a and %A formats
whenever this bug strikes.

This unmasks the bug in the %a format therefore solving the real
issue may both become easier and more urgent.

Possibly related to:	PR 85080
With help by:		bde@
2005-12-13 13:23:27 +00:00
..
_flock_stub.c Backout the previous revision due to objections. 2004-03-09 04:51:58 +00:00
asprintf.c Back out previous and solve the problems a different way: move va_start/ 2002-09-26 13:09:48 +00:00
clrerr.c
fclose.3 mdoc(7) police: "The .Fn function". 2002-12-18 12:45:11 +00:00
fclose.c
fdopen.c
feof.c Re-add macro versions of getc(), getchar(), putc(), putchar(), feof(), 2004-03-17 01:43:08 +00:00
ferror.3 mdoc(7) police: markup laundry. 2003-02-23 01:47:49 +00:00
ferror.c Re-add macro versions of getc(), getchar(), putc(), putchar(), feof(), 2004-03-17 01:43:08 +00:00
fflush.3 Add or correct section number in .Xr. Use .Vt or .Fn 2003-06-08 10:01:52 +00:00
fflush.c Add commentary explaining why we return EBADF upon attempts to fflush() a 2004-07-04 20:17:00 +00:00
fgetc.c Do not redundantly set the stream orientation in getc(), putc(), and 2004-03-19 09:04:56 +00:00
fgetln.3 Add a cross reference to fgetwln(3). 2004-07-16 06:07:12 +00:00
fgetln.c Rename slbexpand() to __slbexpand() and make it available outside 2004-07-16 05:52:51 +00:00
fgetpos.c Add restrict type-qualifier. 2002-10-12 16:13:41 +00:00
fgets.3 Remove references to nonexistent "FreeBSD Security Architecture" document. 2005-09-05 09:49:33 +00:00
fgets.c Basic support for wide character I/O: getwc(), fgetwc(), getwchar(), 2002-08-13 09:30:41 +00:00
fgetwc.c Call __mbrtowc() and __wcrtomb() directly instead of taking detours 2004-07-20 08:27:27 +00:00
fgetwln.3 Use the correct function name as .Nm argument. 2005-09-18 15:40:03 +00:00
fgetwln.c Fix an off-by-one bug that caused the first character of the buffer to 2004-08-06 17:00:09 +00:00
fgetws.3 MFp4: Add the standard "the {fgetws,fputws} function will fail if" text 2003-03-09 02:56:54 +00:00
fgetws.c Don't add integers to void pointers. 2004-10-03 15:48:32 +00:00
fileno.c Re-add macro versions of getc(), getchar(), putc(), putchar(), feof(), 2004-03-17 01:43:08 +00:00
findfp.c Associate a multibyte conversion state object with each stream. Reset it 2004-05-22 15:19:41 +00:00
flags.c
floatio.h Prototype __hdtoa() and __hldtoa(). 2004-01-18 08:28:47 +00:00
flockfile.3 Add missing word to "Return Values" section. 2003-01-13 01:29:14 +00:00
fopen.3 The correct description for mode "w" is 2005-05-04 08:12:44 +00:00
fopen.c Add restrict type-qualifier. 2002-10-12 16:13:41 +00:00
fprintf.c Style: One space between "restrict" qualifier and "*". 2002-09-06 11:24:06 +00:00
fpurge.c
fputc.c Do not redundantly set the stream orientation in getc(), putc(), and 2004-03-19 09:04:56 +00:00
fputs.3 mdoc(7) police: "The .Fa argument.". 2002-12-19 09:40:28 +00:00
fputs.c Add restrict type-qualifier. 2002-10-12 16:13:41 +00:00
fputwc.c Call __mbrtowc() and __wcrtomb() directly instead of taking detours 2004-07-20 08:27:27 +00:00
fputws.3 Assorted mdoc(7) fixes. 2003-05-22 13:02:28 +00:00
fputws.c Implement the GNU extensions of mbsnrtowcs() and wcsnrtombs(). These are 2004-07-21 10:54:57 +00:00
fread.3 Add restrict type-qualifier. 2002-10-12 16:13:41 +00:00
fread.c Add restrict type-qualifier. 2002-10-12 16:13:41 +00:00
freopen.c Associate a multibyte conversion state object with each stream. Reset it 2004-05-22 15:19:41 +00:00
fscanf.c #include "local.h" to make __svfscanf()'s prototype visible. 2003-01-03 23:27:27 +00:00
fseek.3 Improve documentation for fgetpos() and fsetpos(), and discourage 2004-03-20 08:38:27 +00:00
fseek.c Associate a multibyte conversion state object with each stream. Reset it 2004-05-22 15:19:41 +00:00
fsetpos.c
ftell.c
funopen.3 Eliminate double whitespace. 2004-07-03 22:30:10 +00:00
funopen.c
fvwrite.c Rename cantwrite() to prepwrite(). The latter is less confusing, 2004-06-08 05:45:48 +00:00
fvwrite.h
fwalk.c
fwide.3 mdoc(7) police: "The .Fn function". 2002-12-18 12:45:11 +00:00
fwide.c Basic support for wide character I/O: getwc(), fgetwc(), getwchar(), 2002-08-13 09:30:41 +00:00
fwprintf.c Add implementations of the wprintf() family of functions, which perform 2002-09-21 13:00:30 +00:00
fwrite.c Add restrict type-qualifier. 2002-10-12 16:13:41 +00:00
fwscanf.c Add implementations of wscanf() and related functions: fwscanf(), swscanf(), 2002-09-23 12:40:06 +00:00
getc.3 Fix prototype. 2005-11-23 20:26:58 +00:00
getc.c Do not redundantly set the stream orientation in getc(), putc(), and 2004-03-19 09:04:56 +00:00
getchar.c Do not redundantly set the stream orientation in getc(), putc(), and 2004-03-19 09:04:56 +00:00
gets.c Back out previous. Many people disagreed with removing the warning. 2003-01-30 23:32:53 +00:00
getw.c
getwc.3 Fix prototype. 2005-11-23 20:26:58 +00:00
getwc.c Provide trivial macro implementations of getwc(), getwchar(), putwc() and 2004-05-25 10:42:52 +00:00
getwchar.c Provide trivial macro implementations of getwc(), getwchar(), putwc() and 2004-05-25 10:42:52 +00:00
glue.h The header glue.h should provide just a declaration for the variable 2005-05-13 21:12:34 +00:00
local.h Move the declaration of __cleanup to libc_private.h as it is used in both 2005-09-12 13:46:32 +00:00
makebuf.c Move the declaration of __cleanup to libc_private.h as it is used in both 2005-09-12 13:46:32 +00:00
Makefile.inc Add fgetwln(), a wide character version of fgetln(). 2004-07-16 06:06:09 +00:00
mktemp.3 Sort sections. 2005-01-20 09:17:07 +00:00
mktemp.c Eliminate 61 warnings emitted at WARNS=2 (leaving 53 to go). 2003-02-16 17:29:11 +00:00
perror.c Write the message to stderr, not file descriptor 2, so that perror() 2002-12-19 09:53:26 +00:00
printf.3 Remove references to nonexistent "FreeBSD Security Architecture" document. 2005-09-05 09:49:33 +00:00
printf.c Style: One space between "restrict" qualifier and "*". 2002-09-06 11:24:06 +00:00
putc.3 Re-add description of putc() macro (back out rev. 1.13.) 2004-03-17 12:46:17 +00:00
putc.c Do not redundantly set the stream orientation in getc(), putc(), and 2004-03-19 09:04:56 +00:00
putchar.c Do not redundantly set the stream orientation in getc(), putc(), and 2004-03-19 09:04:56 +00:00
puts.c Set stream orientation in puts(). 2004-03-10 09:15:38 +00:00
putw.c
putwc.3 Refer to "wide characters" instead of "wide-characters". 2004-03-16 13:30:11 +00:00
putwc.c Provide trivial macro implementations of getwc(), getwchar(), putwc() and 2004-05-25 10:42:52 +00:00
putwchar.c Provide trivial macro implementations of getwc(), getwchar(), putwc() and 2004-05-25 10:42:52 +00:00
refill.c Basic support for wide character I/O: getwc(), fgetwc(), getwchar(), 2002-08-13 09:30:41 +00:00
remove.3
remove.c
rewind.c
rget.c
scanf.3 Update to reflect changes in vfscanf.c,v 1.32. Remove bogus 2003-06-28 09:03:25 +00:00
scanf.c #include "local.h" to make __svfscanf()'s prototype visible. 2003-01-03 23:27:27 +00:00
setbuf.3 Scheduled mdoc(7) sweep. 2005-01-11 20:50:51 +00:00
setbuf.c Style: One space between "restrict" qualifier and "*". 2002-09-06 11:24:06 +00:00
setbuffer.c
setvbuf.c Style: One space between "restrict" qualifier and "*". 2002-09-06 11:24:06 +00:00
snprintf.c Style: One space between "restrict" qualifier and "*". 2002-09-06 11:24:06 +00:00
sprintf.c Style: One space between "restrict" qualifier and "*". 2002-09-06 11:24:06 +00:00
sscanf.c Add restrict type-qualifier. 2002-10-12 16:13:41 +00:00
stdio.3 Sort sections. 2005-01-20 09:17:07 +00:00
stdio.c #include <stdlib.h> for free()'s prototype. 2003-01-07 06:17:13 +00:00
swprintf.c Add implementations of the wprintf() family of functions, which perform 2002-09-21 13:00:30 +00:00
swscanf.c Add implementations of wscanf() and related functions: fwscanf(), swscanf(), 2002-09-23 12:40:06 +00:00
tempnam.c
tmpfile.c Fix use of an uninitialized pointer introduced in a previous revision. 2003-02-06 01:08:19 +00:00
tmpnam.3 Remove references to nonexistent "FreeBSD Security Architecture" document. 2005-09-05 09:49:33 +00:00
tmpnam.c
ungetc.3 Cross-reference between byte and wide-character stdio functions. Remove 2002-10-10 04:12:40 +00:00
ungetc.c Set stream orientation in ungetc() instead of __ungetc(). This avoids 2004-03-10 12:41:11 +00:00
ungetwc.3 Refer to "wide characters" instead of "wide-characters". 2004-03-16 13:30:11 +00:00
ungetwc.c Include <sys/types.h> and <limits.h> ourselves, don't assume they are included 2005-08-20 07:59:13 +00:00
unlocked.c Add function versions of getchar_unlocked(), getc_unlocked(), 2003-01-10 04:35:08 +00:00
vasprintf.c Back out previous, free the buffer when __vfprintf() fails and don't bother 2002-09-26 13:11:24 +00:00
vfprintf.c /* You're not supposed to hit this problem */ 2005-12-13 13:23:27 +00:00
vfscanf.c Remove unused variable. 2005-04-08 20:58:47 +00:00
vfwprintf.c Be bug-for-bug compatible with the C standard with respect to 2005-04-16 22:36:51 +00:00
vfwscanf.c Include <sys/types.h> and <limits.h> ourselves, don't assume they are included 2005-08-20 07:59:13 +00:00
vprintf.c Style: One space between "restrict" qualifier and "*". 2002-09-06 11:24:06 +00:00
vscanf.c #include "local.h" to make __svfscanf()'s prototype visible. 2003-01-03 23:27:27 +00:00
vsnprintf.c When size is 1 should just null terminate the string. The dummy variable 2003-07-02 07:08:44 +00:00
vsprintf.c Style: One space between "restrict" qualifier and "*". 2002-09-06 11:24:06 +00:00
vsscanf.c Add restrict type-qualifier. 2002-10-12 16:13:41 +00:00
vswprintf.c Fix EOVERFLOW detection in vswprintf(3) 2005-02-21 19:41:44 +00:00
vswscanf.c Prepare to handle trivial state-dependent encodings. Full support for 2004-04-07 09:55:05 +00:00
vwprintf.c Add implementations of the wprintf() family of functions, which perform 2002-09-21 13:00:30 +00:00
vwscanf.c Add implementations of wscanf() and related functions: fwscanf(), swscanf(), 2002-09-23 12:40:06 +00:00
wbuf.c Rename cantwrite() to prepwrite(). The latter is less confusing, 2004-06-08 05:45:32 +00:00
wprintf.3 Add more useful cross-references to the SEE ALSO section. 2003-07-05 07:55:34 +00:00
wprintf.c Add implementations of the wprintf() family of functions, which perform 2002-09-21 13:00:30 +00:00
wscanf.3 Catch up with recent FP-related changes to scanf.3 and vfwscanf.c. 2003-07-05 07:47:55 +00:00
wscanf.c Add implementations of wscanf() and related functions: fwscanf(), swscanf(), 2002-09-23 12:40:06 +00:00
wsetup.c Set errno to EBADF on attempts to write to a stream that is not 2004-06-08 05:44:52 +00:00