aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKenichi Handa1997-03-18 23:31:34 +0000
committerKenichi Handa1997-03-18 23:31:34 +0000
commit085d590815e248a0fb4beca49c8137dcb051de20 (patch)
tree93e840b754ac018cb8d2cc88001f0cca20c7dae7 /src
parente57bca5d35f6a700d7f9162d17ef9bc1334ac17a (diff)
downloademacs-085d590815e248a0fb4beca49c8137dcb051de20.tar.gz
emacs-085d590815e248a0fb4beca49c8137dcb051de20.zip
(encode_terminal_code): Check validity of character code.
Diffstat (limited to 'src')
-rw-r--r--src/term.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/term.c b/src/term.c
index 0042da83600..df7f86cba92 100644
--- a/src/term.c
+++ b/src/term.c
@@ -785,8 +785,8 @@ encode_terminal_code (src, dst, src_len, dst_len, consumed)
785{ 785{
786 GLYPH *src_start = src, *src_end = src + src_len; 786 GLYPH *src_start = src, *src_end = src + src_len;
787 unsigned char *dst_start = dst, *dst_end = dst + dst_len; 787 unsigned char *dst_start = dst, *dst_end = dst + dst_len;
788 register GLYPH g = *src; 788 register GLYPH g;
789 int c = GLYPH_CHAR (selected_frame, g); 789 unsigned int c;
790 unsigned char workbuf[4], *buf; 790 unsigned char workbuf[4], *buf;
791 int len, produced, processed; 791 int len, produced, processed;
792 register int tlen = GLYPH_TABLE_LENGTH; 792 register int tlen = GLYPH_TABLE_LENGTH;
@@ -798,7 +798,12 @@ encode_terminal_code (src, dst, src_len, dst_len, consumed)
798 /* We must skip glyphs to be padded for a wide character. */ 798 /* We must skip glyphs to be padded for a wide character. */
799 if (! (g & GLYPH_MASK_PADDING)) 799 if (! (g & GLYPH_MASK_PADDING))
800 { 800 {
801 c = GLYPH_CHAR (selected_frame, g); 801 if ((c = GLYPH_CHAR (selected_frame, g)) > MAX_CHAR)
802 {
803 c = ' ';
804 g = MAKE_GLYPH (selected_frame, c,
805 GLYPH_FACE (selected_frame, g));
806 }
802 if (COMPOSITE_CHAR_P (c)) 807 if (COMPOSITE_CHAR_P (c))
803 { 808 {
804 /* If C is a composite character, we can display 809 /* If C is a composite character, we can display
@@ -817,7 +822,7 @@ encode_terminal_code (src, dst, src_len, dst_len, consumed)
817 /* We set the multi-byte form of C at BUF. */ 822 /* We set the multi-byte form of C at BUF. */
818 len = CHAR_STRING (c, workbuf, buf); 823 len = CHAR_STRING (c, workbuf, buf);
819 else 824 else
820 /* We have the multi-byte form in Vglyph_table. */ 825 /* We have a string in Vglyph_table. */
821 len = GLYPH_LENGTH (tbase, g), buf = GLYPH_STRING (tbase, g); 826 len = GLYPH_LENGTH (tbase, g), buf = GLYPH_STRING (tbase, g);
822 827
823 produced = encode_coding (&terminal_coding, buf, dst, 828 produced = encode_coding (&terminal_coding, buf, dst,