diff options
| author | Kenichi Handa | 1997-03-18 23:31:34 +0000 |
|---|---|---|
| committer | Kenichi Handa | 1997-03-18 23:31:34 +0000 |
| commit | 085d590815e248a0fb4beca49c8137dcb051de20 (patch) | |
| tree | 93e840b754ac018cb8d2cc88001f0cca20c7dae7 /src | |
| parent | e57bca5d35f6a700d7f9162d17ef9bc1334ac17a (diff) | |
| download | emacs-085d590815e248a0fb4beca49c8137dcb051de20.tar.gz emacs-085d590815e248a0fb4beca49c8137dcb051de20.zip | |
(encode_terminal_code): Check validity of character code.
Diffstat (limited to 'src')
| -rw-r--r-- | src/term.c | 13 |
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, |