From 085d590815e248a0fb4beca49c8137dcb051de20 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Tue, 18 Mar 1997 23:31:34 +0000 Subject: [PATCH] (encode_terminal_code): Check validity of character code. --- src/term.c | 13 +++++++++---- 1 file 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) { GLYPH *src_start = src, *src_end = src + src_len; unsigned char *dst_start = dst, *dst_end = dst + dst_len; - register GLYPH g = *src; - int c = GLYPH_CHAR (selected_frame, g); + register GLYPH g; + unsigned int c; unsigned char workbuf[4], *buf; int len, produced, processed; register int tlen = GLYPH_TABLE_LENGTH; @@ -798,7 +798,12 @@ encode_terminal_code (src, dst, src_len, dst_len, consumed) /* We must skip glyphs to be padded for a wide character. */ if (! (g & GLYPH_MASK_PADDING)) { - c = GLYPH_CHAR (selected_frame, g); + if ((c = GLYPH_CHAR (selected_frame, g)) > MAX_CHAR) + { + c = ' '; + g = MAKE_GLYPH (selected_frame, c, + GLYPH_FACE (selected_frame, g)); + } if (COMPOSITE_CHAR_P (c)) { /* If C is a composite character, we can display @@ -817,7 +822,7 @@ encode_terminal_code (src, dst, src_len, dst_len, consumed) /* We set the multi-byte form of C at BUF. */ len = CHAR_STRING (c, workbuf, buf); else - /* We have the multi-byte form in Vglyph_table. */ + /* We have a string in Vglyph_table. */ len = GLYPH_LENGTH (tbase, g), buf = GLYPH_STRING (tbase, g); produced = encode_coding (&terminal_coding, buf, dst, -- 2.39.5