1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-25 10:47:00 +00:00

(font_intern_prop): Validate str as multibyte.

This commit is contained in:
Kenichi Handa 2008-12-30 00:46:13 +00:00
parent 25f0137554
commit 545312c251
2 changed files with 19 additions and 3 deletions

View 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

View 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. */