Mercurial > emacs
changeset 104090:1d6a73f0d113
(xfont_list_pattern): Don't ignore the return value of
font_parse_xlfd. Check font properties more rigidly.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Tue, 28 Jul 2009 02:07:05 +0000 |
parents | e48e0579baed |
children | 5ad8c9beecab |
files | src/xfont.c |
diffstat | 1 files changed, 16 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/xfont.c Tue Jul 28 01:47:44 2009 +0000 +++ b/src/xfont.c Tue Jul 28 02:07:05 2009 +0000 @@ -411,16 +411,25 @@ continue; entity = font_make_entity (); xfont_decode_coding_xlfd (indices[i], -1, buf); - font_parse_xlfd (buf, entity); + if (font_parse_xlfd (buf, entity) < 0) + continue; ASET (entity, FONT_TYPE_INDEX, Qx); /* Avoid auto-scaled fonts. */ - if (XINT (AREF (entity, FONT_DPI_INDEX)) != 0 + if (INTEGERP (AREF (entity, FONT_DPI_INDEX)) + && INTEGERP (AREF (entity, FONT_AVGWIDTH_INDEX)) + && XINT (AREF (entity, FONT_DPI_INDEX)) != 0 && XINT (AREF (entity, FONT_AVGWIDTH_INDEX)) == 0) continue; /* Avoid not-allowed scalable fonts. */ if (NILP (Vscalable_fonts_allowed)) { - if (XINT (AREF (entity, FONT_SIZE_INDEX)) == 0) + int size = 0; + + if (INTEGERP (AREF (entity, FONT_SIZE_INDEX))) + size = XINT (AREF (entity, FONT_SIZE_INDEX)); + else if (FLOATP (AREF (entity, FONT_SIZE_INDEX))) + size = XFLOAT_DATA (AREF (entity, FONT_SIZE_INDEX)); + if (size == 0) continue; } else if (CONSP (Vscalable_fonts_allowed)) @@ -439,6 +448,10 @@ continue; } + /* Avoid fonts of invalid registry. */ + if (NILP (AREF (entity, FONT_REGISTRY_INDEX))) + continue; + /* Update encoding and repertory if necessary. */ if (! EQ (registry, AREF (entity, FONT_REGISTRY_INDEX))) {