]> git.eshelyaron.com Git - emacs.git/commitdiff
(font_intern_prop): Validate str as multibyte.
authorKenichi Handa <handa@m17n.org>
Tue, 30 Dec 2008 00:46:13 +0000 (00:46 +0000)
committerKenichi Handa <handa@m17n.org>
Tue, 30 Dec 2008 00:46:13 +0000 (00:46 +0000)
src/ChangeLog
src/font.c

index a459eac1608eb5b0e2f783af9d94786a46183f8f..e362b323d977cdb71e42b1b55a100d3e1ab3696e 100644 (file)
@@ -1,3 +1,7 @@
+2008-12-30  Kenichi Handa  <handa@m17n.org>
+
+       * font.c (font_intern_prop): Validate str as multibyte.
+
 2008-12-29  Dan Nicolaescu  <dann@ics.uci.edu>
 
        * dispextern.h (struct face): Move lface and hash from the middle
index 2f98141b53dd8137e4d9b5c80e6a9d79356ee9c0..0c9a625e770a845dc9df1633e5a785a53e4e41dc 100644 (file)
@@ -254,6 +254,7 @@ font_intern_prop (str, len, force_symbol)
   int i;
   Lisp_Object tem;
   Lisp_Object obarray;
+  int nbytes, nchars;
 
   if (len == 1 && *str == '*')
     return Qnil;
@@ -266,14 +267,25 @@ font_intern_prop (str, len, force_symbol)
        return make_number (atoi (str));
     }
 
-  /* The following code is copied from the function intern (in lread.c).  */
+  /* The following code is copied from the function intern (in
+     lread.c), and modified to suite our purpose.  */
   obarray = Vobarray;
   if (!VECTORP (obarray) || XVECTOR (obarray)->size == 0)
     obarray = check_obarray (obarray);
-  tem = oblookup (obarray, str, len, len);
+  parse_str_as_multibyte (str, len, &nchars, &nbytes);
+  if (len == nchars || len != nbytes)
+    /* CONTENTS contains no multibyte sequences or contains an invalid
+       multibyte sequence.  We'll make a unibyte string.  */
+    tem = oblookup (obarray, str, len, len);
+  else
+    tem = oblookup (obarray, str, nchars, len);
   if (SYMBOLP (tem))
     return tem;
-  return Fintern (make_unibyte_string (str, len), obarray);
+  if (len == nchars || len != nbytes)
+    tem = make_unibyte_string (str, len);
+  else
+    tem = make_multibyte_string (str, nchars, len);
+  return Fintern (tem, obarray);
 }
 
 /* Return a pixel size of font-spec SPEC on frame F.  */