aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Eggert2011-04-09 16:11:48 -0700
committerPaul Eggert2011-04-09 16:11:48 -0700
commit7d66342ce292392fea0d53e343ec07119ee2d1b8 (patch)
tree541d45ae28299d59b89af5e573730fa8c754b425
parent1e69125eae782c27b700990bc83a982646ca8ba2 (diff)
downloademacs-7d66342ce292392fea0d53e343ec07119ee2d1b8.tar.gz
emacs-7d66342ce292392fea0d53e343ec07119ee2d1b8.zip
* xdisp.c (vmessage): Use a better test for character truncation.
-rw-r--r--src/ChangeLog2
-rw-r--r--src/xdisp.c13
2 files changed, 9 insertions, 6 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index b5e617b1f20..3bd4fc1f4c0 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,7 @@
12011-04-09 Paul Eggert <eggert@cs.ucla.edu> 12011-04-09 Paul Eggert <eggert@cs.ucla.edu>
2 2
3 * xdisp.c (vmessage): Use a better test for character truncation.
4
3 * charset.c (load_charset_map): <, not <=, for optimization, 5 * charset.c (load_charset_map): <, not <=, for optimization,
4 and to avoid potential problems with integer overflow. 6 and to avoid potential problems with integer overflow.
5 * chartab.c (sub_char_table_set_range, char_table_set_range): Likewise. 7 * chartab.c (sub_char_table_set_range, char_table_set_range): Likewise.
diff --git a/src/xdisp.c b/src/xdisp.c
index b1209b998e2..f37254419eb 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -8410,13 +8410,14 @@ vmessage (const char *m, va_list ap)
8410 { 8410 {
8411 char *buf = FRAME_MESSAGE_BUF (f); 8411 char *buf = FRAME_MESSAGE_BUF (f);
8412 size_t bufsize = FRAME_MESSAGE_BUF_SIZE (f); 8412 size_t bufsize = FRAME_MESSAGE_BUF_SIZE (f);
8413 int len = vsnprintf (buf, bufsize, m, ap); 8413 int len;
8414 if (len < 0) 8414
8415 len = 0; 8415 memset (buf, 0, bufsize);
8416 len = vsnprintf (buf, bufsize, m, ap);
8416 8417
8417 /* Do any truncation at a character boundary. */ 8418 /* Do any truncation at a character boundary. */
8418 if (0 < bufsize && bufsize <= len) 8419 if (! (0 <= len && len < bufsize))
8419 for (len = bufsize - 1; 8420 for (len = strnlen (buf, bufsize);
8420 len && ! CHAR_HEAD_P (buf[len - 1]); 8421 len && ! CHAR_HEAD_P (buf[len - 1]);
8421 len--) 8422 len--)
8422 continue; 8423 continue;
@@ -19495,7 +19496,7 @@ decode_mode_spec (struct window *w, register int c, int field_width,
19495 EMACS_INT limit = BUF_BEGV (b); 19496 EMACS_INT limit = BUF_BEGV (b);
19496 EMACS_INT limit_byte = BUF_BEGV_BYTE (b); 19497 EMACS_INT limit_byte = BUF_BEGV_BYTE (b);
19497 EMACS_INT position; 19498 EMACS_INT position;
19498 EMACS_INT distance = 19499 EMACS_INT distance =
19499 (height * 2 + 30) * line_number_display_limit_width; 19500 (height * 2 + 30) * line_number_display_limit_width;
19500 19501
19501 if (startpos - distance > limit) 19502 if (startpos - distance > limit)