diff options
| author | Kenichi Handa | 2001-02-15 13:10:38 +0000 |
|---|---|---|
| committer | Kenichi Handa | 2001-02-15 13:10:38 +0000 |
| commit | 0fc71a7725067b60f46e9971c34cfccfefd84cea (patch) | |
| tree | aca64563f34d911a32e548a198ba2ae25b7c6b2a /src/ccl.c | |
| parent | 2a55cd3a1385b730d7d348de9cdde5c007ebfa9b (diff) | |
| download | emacs-0fc71a7725067b60f46e9971c34cfccfefd84cea.tar.gz emacs-0fc71a7725067b60f46e9971c34cfccfefd84cea.zip | |
(ccl_driver) [CCL_ReadMultibyteChar2]: If SRC points an
invalid mulitbyte sequence, treat *SRC as a character of
eight-bit-graphic.
Diffstat (limited to 'src/ccl.c')
| -rw-r--r-- | src/ccl.c | 30 |
1 files changed, 18 insertions, 12 deletions
| @@ -1255,21 +1255,27 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed) | |||
| 1255 | reg[rrr] = i; | 1255 | reg[rrr] = i; |
| 1256 | reg[RRR] = CHARSET_ASCII; | 1256 | reg[RRR] = CHARSET_ASCII; |
| 1257 | } | 1257 | } |
| 1258 | else if (i <= MAX_CHARSET_OFFICIAL_DIMENSION1) | ||
| 1259 | { | ||
| 1260 | if (src >= src_end) | ||
| 1261 | goto ccl_read_multibyte_character_suspend; | ||
| 1262 | reg[RRR] = i; | ||
| 1263 | reg[rrr] = (*src++ & 0x7F); | ||
| 1264 | } | ||
| 1265 | else if (i <= MAX_CHARSET_OFFICIAL_DIMENSION2) | 1258 | else if (i <= MAX_CHARSET_OFFICIAL_DIMENSION2) |
| 1266 | { | 1259 | { |
| 1267 | if ((src + 1) >= src_end) | 1260 | int dimension = BYTES_BY_CHAR_HEAD (i) - 1; |
| 1261 | |||
| 1262 | if (dimension == 0) | ||
| 1263 | { | ||
| 1264 | /* `i' is a leading code for an undefined charset. */ | ||
| 1265 | reg[RRR] = CHARSET_8_BIT_GRAPHIC; | ||
| 1266 | reg[rrr] = i; | ||
| 1267 | } | ||
| 1268 | else if (src + dimension > src_end) | ||
| 1268 | goto ccl_read_multibyte_character_suspend; | 1269 | goto ccl_read_multibyte_character_suspend; |
| 1269 | reg[RRR] = i; | 1270 | else |
| 1270 | i = (*src++ & 0x7F); | 1271 | { |
| 1271 | reg[rrr] = ((i << 7) | (*src & 0x7F)); | 1272 | reg[RRR] = i; |
| 1272 | src++; | 1273 | i = (*src++ & 0x7F); |
| 1274 | if (dimension == 1) | ||
| 1275 | reg[rrr] = i; | ||
| 1276 | else | ||
| 1277 | reg[rrr] = ((i << 7) | (*src++ & 0x7F)); | ||
| 1278 | } | ||
| 1273 | } | 1279 | } |
| 1274 | else if ((i == LEADING_CODE_PRIVATE_11) | 1280 | else if ((i == LEADING_CODE_PRIVATE_11) |
| 1275 | || (i == LEADING_CODE_PRIVATE_12)) | 1281 | || (i == LEADING_CODE_PRIVATE_12)) |