1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-23 07:19:15 +00:00

(CCL_WRITE_CHAR): Increment extra_bytes only when

ccl->eight_bit_control.  Fix check for buffer overflow.
(CCL_WRITE_MULTIBYTE_CHAR): Fix check for buffer overflow.
(ccl_driver): Initialize extra_bytes to 0.
This commit is contained in:
Kenichi Handa 2008-01-31 11:27:46 +00:00
parent 08cf830bbd
commit 8d99a0b354

View File

@ -748,16 +748,13 @@ while(0)
int bytes = SINGLE_BYTE_CHAR_P (ch) ? 1: CHAR_BYTES (ch); \
if (!dst) \
CCL_INVALID_CMD; \
else if (dst + bytes + extra_bytes < (dst_bytes ? dst_end : src)) \
if (ccl->eight_bit_control \
&& bytes == 1 && (ch) >= 0x80 && (ch) < 0xA0) \
extra_bytes++; \
if (dst + bytes + extra_bytes <= (dst_bytes ? dst_end : src)) \
{ \
if (bytes == 1) \
{ \
*dst++ = (ch); \
if (extra_bytes && (ch) >= 0x80 && (ch) < 0xA0) \
/* We may have to convert this eight-bit char to \
multibyte form later. */ \
extra_bytes++; \
} \
*dst++ = (ch); \
else if (CHAR_VALID_P (ch, 0)) \
dst += CHAR_STRING (ch, dst); \
else \
@ -775,7 +772,7 @@ while(0)
int bytes = CHAR_BYTES (ch); \
if (!dst) \
CCL_INVALID_CMD; \
else if (dst + bytes + extra_bytes < (dst_bytes ? dst_end : src)) \
else if (dst + bytes + extra_bytes <= (dst_bytes ? dst_end : src)) \
{ \
if (CHAR_VALID_P ((ch), 0)) \
dst += CHAR_STRING ((ch), dst); \
@ -919,7 +916,7 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed)
each of them will be converted to multibyte form of 2-byte
sequence. For that conversion, we remember how many more bytes
we must keep in DESTINATION in this variable. */
int extra_bytes = ccl->eight_bit_control;
int extra_bytes = 0;
int eof_ic = ccl->eof_ic;
int eof_hit = 0;