From 0fc71a7725067b60f46e9971c34cfccfefd84cea Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Thu, 15 Feb 2001 13:10:38 +0000 Subject: [PATCH] (ccl_driver) [CCL_ReadMultibyteChar2]: If SRC points an invalid mulitbyte sequence, treat *SRC as a character of eight-bit-graphic. --- src/ChangeLog | 6 ++++++ src/ccl.c | 30 ++++++++++++++++++------------ 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index e004696d3c0..c5cd6b41628 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2001-02-15 Kenichi Handa + + * ccl.c (ccl_driver) [CCL_ReadMultibyteChar2]: If SRC points an + invalid multibyte sequence, treat *SRC as a character of + eight-bit-graphic. + 2001-02-15 Eli Zaretskii * textprop.c (Fset_text_properties): Doc fix. diff --git a/src/ccl.c b/src/ccl.c index 45cc525112d..fe7faafb9e5 100644 --- a/src/ccl.c +++ b/src/ccl.c @@ -1255,21 +1255,27 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed) reg[rrr] = i; reg[RRR] = CHARSET_ASCII; } - else if (i <= MAX_CHARSET_OFFICIAL_DIMENSION1) - { - if (src >= src_end) - goto ccl_read_multibyte_character_suspend; - reg[RRR] = i; - reg[rrr] = (*src++ & 0x7F); - } else if (i <= MAX_CHARSET_OFFICIAL_DIMENSION2) { - if ((src + 1) >= src_end) + int dimension = BYTES_BY_CHAR_HEAD (i) - 1; + + if (dimension == 0) + { + /* `i' is a leading code for an undefined charset. */ + reg[RRR] = CHARSET_8_BIT_GRAPHIC; + reg[rrr] = i; + } + else if (src + dimension > src_end) goto ccl_read_multibyte_character_suspend; - reg[RRR] = i; - i = (*src++ & 0x7F); - reg[rrr] = ((i << 7) | (*src & 0x7F)); - src++; + else + { + reg[RRR] = i; + i = (*src++ & 0x7F); + if (dimension == 1) + reg[rrr] = i; + else + reg[rrr] = ((i << 7) | (*src++ & 0x7F)); + } } else if ((i == LEADING_CODE_PRIVATE_11) || (i == LEADING_CODE_PRIVATE_12)) -- 2.39.5