From bf0d3f76dcfe7881cb3058169b51cf6602fdcdcb Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Sun, 20 Jul 2014 00:18:23 +0900 Subject: [PATCH] 2014-07-19 Kenichi Handa * xfaces.c (realize_x_face): Call font_load_for_lface with no mandatory font spec (Bug#17973). 2014-07-19 Stefan Monnier * font.c (font_score): Return the worst score if the size of ENTITY is wrong by more than a factor 2 (Bug#17973). --- src/ChangeLog | 10 ++++++++++ src/font.c | 6 +++++- src/xfaces.c | 2 +- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 7d244db6b1d..51569f14f31 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,13 @@ +2014-07-19 K. Handa + + * xfaces.c (realize_x_face): Call font_load_for_lface with no + mandatory font spec (Bug#17973). + +2014-07-19 Stefan Monnier + + * font.c (font_score): Return the worst score if the size of + ENTITY is wrong by more than a factor 2 (Bug#17973). + 2014-07-18 Dmitry Antipov * frame.c (frame_unspecified_color): New function diff --git a/src/font.c b/src/font.c index ef8b5e40eeb..054a68bfd94 100644 --- a/src/font.c +++ b/src/font.c @@ -2158,10 +2158,14 @@ font_score (Lisp_Object entity, Lisp_Object *spec_prop) lowest bit is set if the DPI is different. */ EMACS_INT diff; EMACS_INT pixel_size = XINT (spec_prop[FONT_SIZE_INDEX]); + EMACS_INT entity_size = XINT (AREF (entity, FONT_SIZE_INDEX)); if (CONSP (Vface_font_rescale_alist)) pixel_size *= font_rescale_ratio (entity); - diff = eabs (pixel_size - XINT (AREF (entity, FONT_SIZE_INDEX))) << 1; + if (pixel_size * 2 < entity_size || entity_size * 2 < pixel_size) + /* This size is wrong by more than a factor 2: reject it! */ + return 0xFFFFFFFF; + diff = eabs (pixel_size - entity_size) << 1; if (! NILP (spec_prop[FONT_DPI_INDEX]) && ! EQ (spec_prop[FONT_DPI_INDEX], AREF (entity, FONT_DPI_INDEX))) diff |= 1; diff --git a/src/xfaces.c b/src/xfaces.c index 081875f5bea..34895123db9 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -5547,7 +5547,7 @@ realize_x_face (struct face_cache *cache, Lisp_Object attrs[LFACE_VECTOR_SIZE]) } if (! FONT_OBJECT_P (attrs[LFACE_FONT_INDEX])) attrs[LFACE_FONT_INDEX] - = font_load_for_lface (f, attrs, attrs[LFACE_FONT_INDEX]); + = font_load_for_lface (f, attrs, Ffont_spec (0, NULL)); if (FONT_OBJECT_P (attrs[LFACE_FONT_INDEX])) { face->font = XFONT_OBJECT (attrs[LFACE_FONT_INDEX]); -- 2.39.2