From 4fa58085e38a947ebdd0e9e8e505f23ea2aaecbd Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Tue, 28 Jul 2009 02:07:05 +0000 Subject: [PATCH] (xfont_list_pattern): Don't ignore the return value of font_parse_xlfd. Check font properties more rigidly. --- src/xfont.c | 19 ++++++++++++++++--- 1 file 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))) { -- 2.39.2