aboutsummaryrefslogtreecommitdiffstats
path: root/src/coding.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/coding.c')
-rw-r--r--src/coding.c39
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. */
7021DEFUN ("check-coding-system", Fcheck_coding_system, Scheck_coding_system, 7033DEFUN ("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.
7024If valid, return CODING-SYSTEM, else signal a `coding-system-error' error. */) 7036If valid, return CODING-SYSTEM, else signal a `coding-system-error' error.
7037It is valid if it is nil or a symbol defined as a coding system by the
7038function `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) */