aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lread.c31
1 files changed, 10 insertions, 21 deletions
diff --git a/src/lread.c b/src/lread.c
index a42c1f60c95..6e97e079650 100644
--- a/src/lread.c
+++ b/src/lread.c
@@ -2155,26 +2155,15 @@ grow_read_buffer (void)
2155static int 2155static int
2156character_name_to_code (char const *name, ptrdiff_t name_len) 2156character_name_to_code (char const *name, ptrdiff_t name_len)
2157{ 2157{
2158 Lisp_Object code; 2158 /* For "U+XXXX", pass the leading '+' to string_to_number to reject
2159 2159 monstrosities like "U+-0000". */
2160 /* Code point as U+XXXX.... */ 2160 Lisp_Object code
2161 if (name[0] == 'U' && name[1] == '+') 2161 = (name[0] == 'U' && name[1] == '+'
2162 { 2162 ? string_to_number (name + 1, 16, false)
2163 /* Pass the leading '+' to string_to_number, so that it 2163 : call2 (Qchar_from_name, make_unibyte_string (name, name_len), Qt));
2164 rejects monstrosities such as negative values. */ 2164
2165 code = string_to_number (name + 1, 16, false); 2165 if (! RANGED_INTEGERP (0, code, MAX_UNICODE_CHAR)
2166 } 2166 || char_surrogate_p (XINT (code)))
2167 else
2168 {
2169 /* Look up the name in the table returned by 'ucs-names'. */
2170 AUTO_STRING_WITH_LEN (namestr, name, name_len);
2171 Lisp_Object names = call0 (Qucs_names);
2172 code = CDR (Fassoc (namestr, names));
2173 }
2174
2175 if (! (INTEGERP (code)
2176 && 0 <= XINT (code) && XINT (code) <= MAX_UNICODE_CHAR
2177 && ! char_surrogate_p (XINT (code))))
2178 { 2167 {
2179 AUTO_STRING (format, "\\N{%s}"); 2168 AUTO_STRING (format, "\\N{%s}");
2180 AUTO_STRING_WITH_LEN (namestr, name, name_len); 2169 AUTO_STRING_WITH_LEN (namestr, name, name_len);
@@ -4829,5 +4818,5 @@ that are loaded before your customizations are read! */);
4829 DEFSYM (Qrehash_size, "rehash-size"); 4818 DEFSYM (Qrehash_size, "rehash-size");
4830 DEFSYM (Qrehash_threshold, "rehash-threshold"); 4819 DEFSYM (Qrehash_threshold, "rehash-threshold");
4831 4820
4832 DEFSYM (Qucs_names, "ucs-names"); 4821 DEFSYM (Qchar_from_name, "char-from-name");
4833} 4822}