diff options
| author | Paul Eggert | 2011-04-06 20:34:05 -0700 |
|---|---|---|
| committer | Paul Eggert | 2011-04-06 20:34:05 -0700 |
| commit | 5fdb398c4b75b0c834aff7132f90b0ce5317a25a (patch) | |
| tree | 29ebb8fc5700fefdd867fa497eac27fb7d0bcfe0 /src/window.c | |
| parent | b189fa667ed7ac7b17f9665cd8a0c26316b3c521 (diff) | |
| download | emacs-5fdb398c4b75b0c834aff7132f90b0ce5317a25a.tar.gz emacs-5fdb398c4b75b0c834aff7132f90b0ce5317a25a.zip | |
error: Print 32- and 64-bit integers portably (Bug#8435).
Without this change, on typical 64-bit hosts error ("...%d...", N)
was used to print both 32- and 64-bit integers N, which relied on
undefined behavior.
* lisp.h, src/m/amdx86-64.h, src/m/ia64.h, src/m/ibms390x.h (pEd):
New macro.
* lisp.h (error, verror): Mark as printf-like functions.
* eval.c (verror): Use vsnprintf, not doprnt, to do the real work.
Report overflow in size calculations when allocating printf buffer.
Do not truncate output string at its first null byte.
* xdisp.c (vmessage): Use vsnprintf, not doprnt, to do the real work.
Truncate the output at a character boundary, since vsnprintf does not
do that.
* charset.c (check_iso_charset_parameter): Convert internal
character to string before calling 'error', since %c now has the
printf meaning.
* coding.c (Fdecode_sjis_char, Fdecode_big5_char): Avoid int
overflow when computing char to be passed to 'error'. Do not
pass Lisp_Object to 'error'; pass the integer instead.
* nsfns.m (Fns_do_applescript): Use int, not long, since it's
formatted with plain %d.
Diffstat (limited to 'src/window.c')
| -rw-r--r-- | src/window.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/window.c b/src/window.c index 5ca46dd3316..ebfd1b0f778 100644 --- a/src/window.c +++ b/src/window.c | |||
| @@ -3804,7 +3804,7 @@ See Info node `(elisp)Splitting Windows' for more details and examples. */) | |||
| 3804 | error ("Window height %d too small (after splitting)", size_int); | 3804 | error ("Window height %d too small (after splitting)", size_int); |
| 3805 | if (size_int + window_safe_height > XFASTINT (o->total_lines)) | 3805 | if (size_int + window_safe_height > XFASTINT (o->total_lines)) |
| 3806 | error ("Window height %d too small (after splitting)", | 3806 | error ("Window height %d too small (after splitting)", |
| 3807 | XFASTINT (o->total_lines) - size_int); | 3807 | (int) (XFASTINT (o->total_lines) - size_int)); |
| 3808 | if (NILP (o->parent) | 3808 | if (NILP (o->parent) |
| 3809 | || NILP (XWINDOW (o->parent)->vchild)) | 3809 | || NILP (XWINDOW (o->parent)->vchild)) |
| 3810 | { | 3810 | { |
| @@ -3821,7 +3821,7 @@ See Info node `(elisp)Splitting Windows' for more details and examples. */) | |||
| 3821 | error ("Window width %d too small (after splitting)", size_int); | 3821 | error ("Window width %d too small (after splitting)", size_int); |
| 3822 | if (size_int + window_safe_width > XFASTINT (o->total_cols)) | 3822 | if (size_int + window_safe_width > XFASTINT (o->total_cols)) |
| 3823 | error ("Window width %d too small (after splitting)", | 3823 | error ("Window width %d too small (after splitting)", |
| 3824 | XFASTINT (o->total_cols) - size_int); | 3824 | (int) (XFASTINT (o->total_cols) - size_int)); |
| 3825 | if (NILP (o->parent) | 3825 | if (NILP (o->parent) |
| 3826 | || NILP (XWINDOW (o->parent)->hchild)) | 3826 | || NILP (XWINDOW (o->parent)->hchild)) |
| 3827 | { | 3827 | { |