From: Kenichi Handa <handa@m17n.org>
Date: Tue, 28 Jul 2009 02:02:40 +0000 (+0000)
Subject: (xfont_list_pattern): Don't ignore the return value of
X-Git-Tag: emacs-23.1~11
X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=b33f089c608a8b0c0b18ebc04b3d9354cb98d26a;p=emacs.git

(xfont_list_pattern): Don't ignore the return value of
font_parse_xlfd.  Check font properties more rigidly.
---

diff --git a/src/xfont.c b/src/xfont.c
index 35113fdf798..5337fb71961 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)))
 	    {