summaryrefslogtreecommitdiff
path: root/src/xfont.c
diff options
context:
space:
mode:
authorKenichi Handa <handa@m17n.org>2009-07-28 02:07:05 +0000
committerKenichi Handa <handa@m17n.org>2009-07-28 02:07:05 +0000
commit4fa58085e38a947ebdd0e9e8e505f23ea2aaecbd (patch)
treef15de659722db9a0274a3c2867a83616453c8876 /src/xfont.c
parent92491c14be24837ca8cff20e6945eb1063b0b32d (diff)
downloademacs-4fa58085e38a947ebdd0e9e8e505f23ea2aaecbd.tar.gz
(xfont_list_pattern): Don't ignore the return value of
font_parse_xlfd. Check font properties more rigidly.
Diffstat (limited to 'src/xfont.c')
-rw-r--r--src/xfont.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/xfont.c b/src/xfont.c
index ad12800efb4..7db7cae5c65 100644
--- a/src/xfont.c
+++ b/src/xfont.c
@@ -411,16 +411,25 @@ xfont_list_pattern (Display *display, char *pattern,
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 @@ xfont_list_pattern (Display *display, char *pattern,
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)))
{