]> git.eshelyaron.com Git - emacs.git/commitdiff
(xfont_list_pattern): Don't ignore the return value of
authorKenichi Handa <handa@m17n.org>
Tue, 28 Jul 2009 02:07:05 +0000 (02:07 +0000)
committerKenichi Handa <handa@m17n.org>
Tue, 28 Jul 2009 02:07:05 +0000 (02:07 +0000)
font_parse_xlfd.  Check font properties more rigidly.

src/xfont.c

index ad12800efb4ea6c19eefdbe6f0869b4e62bbf7b3..7db7cae5c65b5ba5a51477c3abb45ad6ae9a7a7f 100644 (file)
@@ -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)))
            {