diff options
Diffstat (limited to 'src/coding.c')
| -rw-r--r-- | src/coding.c | 39 |
1 files changed, 28 insertions, 11 deletions
diff --git a/src/coding.c b/src/coding.c index d78f14b1445..0b51dd54d90 100644 --- a/src/coding.c +++ b/src/coding.c | |||
| @@ -1714,7 +1714,7 @@ emacs_mule_char (coding, src, nbytes, nchars, id) | |||
| 1714 | if (! (charset = emacs_mule_charset[c])) | 1714 | if (! (charset = emacs_mule_charset[c])) |
| 1715 | goto invalid_code; | 1715 | goto invalid_code; |
| 1716 | ONE_MORE_BYTE (c); | 1716 | ONE_MORE_BYTE (c); |
| 1717 | if (c < 0) | 1717 | if (c < 0xA0) |
| 1718 | goto invalid_code; | 1718 | goto invalid_code; |
| 1719 | code = c & 0x7F; | 1719 | code = c & 0x7F; |
| 1720 | break; | 1720 | break; |
| @@ -1724,10 +1724,10 @@ emacs_mule_char (coding, src, nbytes, nchars, id) | |||
| 1724 | || c == EMACS_MULE_LEADING_CODE_PRIVATE_12) | 1724 | || c == EMACS_MULE_LEADING_CODE_PRIVATE_12) |
| 1725 | { | 1725 | { |
| 1726 | ONE_MORE_BYTE (c); | 1726 | ONE_MORE_BYTE (c); |
| 1727 | if (c < 0 || ! (charset = emacs_mule_charset[c])) | 1727 | if (c < 0xA0 || ! (charset = emacs_mule_charset[c])) |
| 1728 | goto invalid_code; | 1728 | goto invalid_code; |
| 1729 | ONE_MORE_BYTE (c); | 1729 | ONE_MORE_BYTE (c); |
| 1730 | if (c < 0) | 1730 | if (c < 0xA0) |
| 1731 | goto invalid_code; | 1731 | goto invalid_code; |
| 1732 | code = c & 0x7F; | 1732 | code = c & 0x7F; |
| 1733 | } | 1733 | } |
| @@ -1736,11 +1736,11 @@ emacs_mule_char (coding, src, nbytes, nchars, id) | |||
| 1736 | if (! (charset = emacs_mule_charset[c])) | 1736 | if (! (charset = emacs_mule_charset[c])) |
| 1737 | goto invalid_code; | 1737 | goto invalid_code; |
| 1738 | ONE_MORE_BYTE (c); | 1738 | ONE_MORE_BYTE (c); |
| 1739 | if (c < 0) | 1739 | if (c < 0xA0) |
| 1740 | goto invalid_code; | 1740 | goto invalid_code; |
| 1741 | code = (c & 0x7F) << 8; | 1741 | code = (c & 0x7F) << 8; |
| 1742 | ONE_MORE_BYTE (c); | 1742 | ONE_MORE_BYTE (c); |
| 1743 | if (c < 0) | 1743 | if (c < 0xA0) |
| 1744 | goto invalid_code; | 1744 | goto invalid_code; |
| 1745 | code |= c & 0x7F; | 1745 | code |= c & 0x7F; |
| 1746 | } | 1746 | } |
| @@ -1751,11 +1751,11 @@ emacs_mule_char (coding, src, nbytes, nchars, id) | |||
| 1751 | if (c < 0 || ! (charset = emacs_mule_charset[c])) | 1751 | if (c < 0 || ! (charset = emacs_mule_charset[c])) |
| 1752 | goto invalid_code; | 1752 | goto invalid_code; |
| 1753 | ONE_MORE_BYTE (c); | 1753 | ONE_MORE_BYTE (c); |
| 1754 | if (c < 0) | 1754 | if (c < 0xA0) |
| 1755 | goto invalid_code; | 1755 | goto invalid_code; |
| 1756 | code = (c & 0x7F) << 8; | 1756 | code = (c & 0x7F) << 8; |
| 1757 | ONE_MORE_BYTE (c); | 1757 | ONE_MORE_BYTE (c); |
| 1758 | if (c < 0) | 1758 | if (c < 0xA0) |
| 1759 | goto invalid_code; | 1759 | goto invalid_code; |
| 1760 | code |= c & 0x7F; | 1760 | code |= c & 0x7F; |
| 1761 | break; | 1761 | break; |
| @@ -3232,7 +3232,10 @@ decode_coding_iso_2022 (coding) | |||
| 3232 | && src + 1 < src_end | 3232 | && src + 1 < src_end |
| 3233 | && src[0] == '%' | 3233 | && src[0] == '%' |
| 3234 | && src[1] == '@') | 3234 | && src[1] == '@') |
| 3235 | break; | 3235 | { |
| 3236 | src += 2; | ||
| 3237 | break; | ||
| 3238 | } | ||
| 3236 | *p++ = ASCII_BYTE_P (c1) ? c1 : BYTE8_TO_CHAR (c1); | 3239 | *p++ = ASCII_BYTE_P (c1) ? c1 : BYTE8_TO_CHAR (c1); |
| 3237 | } | 3240 | } |
| 3238 | if (p + 3 > charbuf_end) | 3241 | if (p + 3 > charbuf_end) |
| @@ -5948,11 +5951,14 @@ produce_composition (coding, charbuf, pos) | |||
| 5948 | 5951 | ||
| 5949 | len = -charbuf[0]; | 5952 | len = -charbuf[0]; |
| 5950 | to = pos + charbuf[2]; | 5953 | to = pos + charbuf[2]; |
| 5954 | if (to <= pos) | ||
| 5955 | return; | ||
| 5951 | method = (enum composition_method) (charbuf[3]); | 5956 | method = (enum composition_method) (charbuf[3]); |
| 5952 | 5957 | ||
| 5953 | if (method == COMPOSITION_RELATIVE) | 5958 | if (method == COMPOSITION_RELATIVE) |
| 5954 | components = Qnil; | 5959 | components = Qnil; |
| 5955 | else | 5960 | else if (method >= COMPOSITION_WITH_RULE |
| 5961 | && method <= COMPOSITION_WITH_RULE_ALTCHARS) | ||
| 5956 | { | 5962 | { |
| 5957 | Lisp_Object args[MAX_COMPOSITION_COMPONENTS * 2 - 1]; | 5963 | Lisp_Object args[MAX_COMPOSITION_COMPONENTS * 2 - 1]; |
| 5958 | int i; | 5964 | int i; |
| @@ -5960,10 +5966,16 @@ produce_composition (coding, charbuf, pos) | |||
| 5960 | len -= 4; | 5966 | len -= 4; |
| 5961 | charbuf += 4; | 5967 | charbuf += 4; |
| 5962 | for (i = 0; i < len; i++) | 5968 | for (i = 0; i < len; i++) |
| 5963 | args[i] = make_number (charbuf[i]); | 5969 | { |
| 5970 | args[i] = make_number (charbuf[i]); | ||
| 5971 | if (args[i] < 0) | ||
| 5972 | return; | ||
| 5973 | } | ||
| 5964 | components = (method == COMPOSITION_WITH_ALTCHARS | 5974 | components = (method == COMPOSITION_WITH_ALTCHARS |
| 5965 | ? Fstring (len, args) : Fvector (len, args)); | 5975 | ? Fstring (len, args) : Fvector (len, args)); |
| 5966 | } | 5976 | } |
| 5977 | else | ||
| 5978 | return; | ||
| 5967 | compose_text (pos, to, components, Qnil, coding->dst_object); | 5979 | compose_text (pos, to, components, Qnil, coding->dst_object); |
| 5968 | } | 5980 | } |
| 5969 | 5981 | ||
| @@ -7021,7 +7033,9 @@ If the user enters null input, return second argument DEFAULT-CODING-SYSTEM. */ | |||
| 7021 | DEFUN ("check-coding-system", Fcheck_coding_system, Scheck_coding_system, | 7033 | DEFUN ("check-coding-system", Fcheck_coding_system, Scheck_coding_system, |
| 7022 | 1, 1, 0, | 7034 | 1, 1, 0, |
| 7023 | doc: /* Check validity of CODING-SYSTEM. | 7035 | doc: /* Check validity of CODING-SYSTEM. |
| 7024 | If valid, return CODING-SYSTEM, else signal a `coding-system-error' error. */) | 7036 | If valid, return CODING-SYSTEM, else signal a `coding-system-error' error. |
| 7037 | It is valid if it is nil or a symbol defined as a coding system by the | ||
| 7038 | function `define-coding-system'. */) | ||
| 7025 | (coding_system) | 7039 | (coding_system) |
| 7026 | Lisp_Object coding_system; | 7040 | Lisp_Object coding_system; |
| 7027 | { | 7041 | { |
| @@ -9574,3 +9588,6 @@ emacs_strerror (error_number) | |||
| 9574 | } | 9588 | } |
| 9575 | 9589 | ||
| 9576 | #endif /* emacs */ | 9590 | #endif /* emacs */ |
| 9591 | |||
| 9592 | /* arch-tag: 3a3a2b01-5ff6-4071-9afe-f5b808d9229d | ||
| 9593 | (do not change this comment) */ | ||