diff options
| author | Paul Eggert | 2012-07-04 01:26:20 -0700 |
|---|---|---|
| committer | Paul Eggert | 2012-07-04 01:26:20 -0700 |
| commit | c7f2cd7fd629e6af07eaa2354eda1b7bc81b22aa (patch) | |
| tree | 159baf0fa54265b49eacff122ee849286128cbe3 | |
| parent | 8ce70ed205e01913845330d084b9dd793b66d2c6 (diff) | |
| download | emacs-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/ChangeLog | 5 | ||||
| -rw-r--r-- | src/doprnt.c | 8 |
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 @@ | |||
| 1 | 2012-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 | |||
| 1 | 2012-07-04 Dmitry Antipov <dmantipov@yandex.ru> | 6 | 2012-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 | |||
| 135 | doprnt (char *buffer, ptrdiff_t bufsize, const char *format, | 135 | doprnt (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"); |