* doprnt.c (doprnt): Don't assume string length fits in 'int'.

Tighten new eassert a bit.
This commit is contained in:
Paul Eggert 2012-07-04 01:26:20 -07:00
parent 8ce70ed205
commit c7f2cd7fd6
2 changed files with 9 additions and 4 deletions

View file

@ -1,3 +1,8 @@
2012-07-04 Paul Eggert <eggert@cs.ucla.edu>
* doprnt.c (doprnt): Don't assume string length fits in 'int'.
Tighten new eassert a bit.
2012-07-04 Dmitry Antipov <dmantipov@yandex.ru>
Fix compilation with --enable-gcc-warnings and -O1

View file

@ -135,8 +135,8 @@ ptrdiff_t
doprnt (char *buffer, ptrdiff_t bufsize, const char *format,
const char *format_end, va_list ap)
{
const char *fmt = format; /* Pointer into format string */
register char *bufptr = buffer; /* Pointer into output buffer.. */
const char *fmt = format; /* Pointer into format string. */
char *bufptr = buffer; /* Pointer into output buffer. */
/* Use this for sprintf unless we need something really big. */
char tembuf[DBL_MAX_10_EXP + 100];
@ -150,7 +150,7 @@ doprnt (char *buffer, ptrdiff_t bufsize, const char *format,
/* Buffer we have got with malloc. */
char *big_buffer = NULL;
register int tem = -1;
ptrdiff_t tem = -1;
char *string;
char fixed_buffer[20]; /* Default buffer for small formatting. */
char *fmtcpy;
@ -368,7 +368,7 @@ doprnt (char *buffer, ptrdiff_t bufsize, const char *format,
/* Copy string into final output, truncating if no room. */
doit:
eassert (tem != -1);
eassert (0 <= tem);
/* Coming here means STRING contains ASCII only. */
if (STRING_BYTES_BOUND < tem)
error ("Format width or precision too large");