Mercurial > emacs
comparison src/coding.c @ 89892:a2109a2c25d5
Sync to HEAD.
(emacs_mule_char): Check invalid code more regidly.
| author | Kenichi Handa <handa@m17n.org> |
|---|---|
| date | Mon, 12 Apr 2004 23:17:27 +0000 |
| parents | 9a279ff9d245 |
| children | 37e044cc35f6 |
comparison
equal
deleted
inserted
replaced
| 89891:441b233fd039 | 89892:a2109a2c25d5 |
|---|---|
| 1712 { | 1712 { |
| 1713 case 2: | 1713 case 2: |
| 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; |
| 1721 | 1721 |
| 1722 case 3: | 1722 case 3: |
| 1723 if (c == EMACS_MULE_LEADING_CODE_PRIVATE_11 | 1723 if (c == EMACS_MULE_LEADING_CODE_PRIVATE_11 |
| 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 } |
| 1734 else | 1734 else |
| 1735 { | 1735 { |
| 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 } |
| 1747 break; | 1747 break; |
| 1748 | 1748 |
| 1749 case 4: | 1749 case 4: |
| 1750 ONE_MORE_BYTE (c); | 1750 ONE_MORE_BYTE (c); |
| 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; |
| 1762 | 1762 |
| 1763 case 1: | 1763 case 1: |
| 3230 ONE_MORE_BYTE (c1); | 3230 ONE_MORE_BYTE (c1); |
| 3231 if (c1 == ISO_CODE_ESC | 3231 if (c1 == ISO_CODE_ESC |
| 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) |
| 3239 goto break_loop; | 3242 goto break_loop; |
| 3240 *p++ = ISO_CODE_ESC; | 3243 *p++ = ISO_CODE_ESC; |
| 5946 enum composition_method method; | 5949 enum composition_method method; |
| 5947 Lisp_Object components; | 5950 Lisp_Object components; |
| 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; |
| 5959 | 5965 |
| 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 |
| 5970 | 5982 |
| 5971 /* Put `charset' property on text in CODING->object according to | 5983 /* Put `charset' property on text in CODING->object according to |
| 7019 } | 7031 } |
| 7020 | 7032 |
| 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 { |
| 7028 CHECK_SYMBOL (coding_system); | 7042 CHECK_SYMBOL (coding_system); |
| 7029 if (!NILP (Fcoding_system_p (coding_system))) | 7043 if (!NILP (Fcoding_system_p (coding_system))) |
| 9572 | 9586 |
| 9573 return str; | 9587 return str; |
| 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) */ |
