aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Eggert2012-07-04 01:26:20 -0700
committerPaul Eggert2012-07-04 01:26:20 -0700
commitc7f2cd7fd629e6af07eaa2354eda1b7bc81b22aa (patch)
tree159baf0fa54265b49eacff122ee849286128cbe3
parent8ce70ed205e01913845330d084b9dd793b66d2c6 (diff)
downloademacs-c7f2cd7fd629e6af07eaa2354eda1b7bc81b22aa.tar.gz
emacs-c7f2cd7fd629e6af07eaa2354eda1b7bc81b22aa.zip
* doprnt.c (doprnt): Don't assume string length fits in 'int'.
Tighten new eassert a bit.
-rw-r--r--src/ChangeLog5
-rw-r--r--src/doprnt.c8
2 files changed, 9 insertions, 4 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 065ff35ce77..a600a0b2b6f 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
12012-07-04 Paul Eggert <eggert@cs.ucla.edu>
2
3 * doprnt.c (doprnt): Don't assume string length fits in 'int'.
4 Tighten new eassert a bit.
5
12012-07-04 Dmitry Antipov <dmantipov@yandex.ru> 62012-07-04 Dmitry Antipov <dmantipov@yandex.ru>
2 7
3 Fix compilation with --enable-gcc-warnings and -O1 8 Fix compilation with --enable-gcc-warnings and -O1
diff --git a/src/doprnt.c b/src/doprnt.c
index 707dd0648b5..2aa236d8bbf 100644
--- a/src/doprnt.c
+++ b/src/doprnt.c
@@ -135,8 +135,8 @@ ptrdiff_t
135doprnt (char *buffer, ptrdiff_t bufsize, const char *format, 135doprnt (char *buffer, ptrdiff_t bufsize, const char *format,
136 const char *format_end, va_list ap) 136 const char *format_end, va_list ap)
137{ 137{
138 const char *fmt = format; /* Pointer into format string */ 138 const char *fmt = format; /* Pointer into format string. */
139 register char *bufptr = buffer; /* Pointer into output buffer.. */ 139 char *bufptr = buffer; /* Pointer into output buffer. */
140 140
141 /* Use this for sprintf unless we need something really big. */ 141 /* Use this for sprintf unless we need something really big. */
142 char tembuf[DBL_MAX_10_EXP + 100]; 142 char tembuf[DBL_MAX_10_EXP + 100];
@@ -150,7 +150,7 @@ doprnt (char *buffer, ptrdiff_t bufsize, const char *format,
150 /* Buffer we have got with malloc. */ 150 /* Buffer we have got with malloc. */
151 char *big_buffer = NULL; 151 char *big_buffer = NULL;
152 152
153 register int tem = -1; 153 ptrdiff_t tem = -1;
154 char *string; 154 char *string;
155 char fixed_buffer[20]; /* Default buffer for small formatting. */ 155 char fixed_buffer[20]; /* Default buffer for small formatting. */
156 char *fmtcpy; 156 char *fmtcpy;
@@ -368,7 +368,7 @@ doprnt (char *buffer, ptrdiff_t bufsize, const char *format,
368 368
369 /* Copy string into final output, truncating if no room. */ 369 /* Copy string into final output, truncating if no room. */
370 doit: 370 doit:
371 eassert (tem != -1); 371 eassert (0 <= tem);
372 /* Coming here means STRING contains ASCII only. */ 372 /* Coming here means STRING contains ASCII only. */
373 if (STRING_BYTES_BOUND < tem) 373 if (STRING_BYTES_BOUND < tem)
374 error ("Format width or precision too large"); 374 error ("Format width or precision too large");