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) */