summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPip Cet <pipcet@gmail.com>2020-10-22 13:40:34 +0200
committerEli Zaretskii <eliz@gnu.org>2020-11-07 10:13:07 +0200
commit0cdd6c9218f7df5793155e86d2028288b9b38bd1 (patch)
treebecc8015452dbfe8f72fd1b9b158849cfc4505fe /src
parent29af10afe8be0154a6ce2e538ff50aa1a174c9f0 (diff)
downloademacs-0cdd6c9218f7df5793155e86d2028288b9b38bd1.tar.gz
Handle Cairo errors in ftcrfont_open
* src/ftcrfont.c (ftcrfont_open): Handle Cairo errors (bug#41627). (cherry picked from commit 954a4decfcc8e41084789516773b22d0adc11d91)
Diffstat (limited to 'src')
-rw-r--r--src/ftcrfont.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/ftcrfont.c b/src/ftcrfont.c
index a0e18e13cfa..c5dfa099745 100644
--- a/src/ftcrfont.c
+++ b/src/ftcrfont.c
@@ -139,7 +139,8 @@ ftcrfont_open (struct frame *f, Lisp_Object entity, int pixel_size)
FcPatternDestroy (pat);
font_face = cairo_ft_font_face_create_for_pattern (match);
- if (!font_face)
+ if (!font_face
+ || cairo_font_face_status (font_face) != CAIRO_STATUS_SUCCESS)
{
unblock_input ();
FcPatternDestroy (match);
@@ -154,6 +155,18 @@ ftcrfont_open (struct frame *f, Lisp_Object entity, int pixel_size)
cairo_font_face_destroy (font_face);
cairo_font_options_destroy (options);
unblock_input ();
+ if (!scaled_font
+ || cairo_scaled_font_status (scaled_font) != CAIRO_STATUS_SUCCESS)
+ {
+ FcPatternDestroy (match);
+ return Qnil;
+ }
+ ft_face = cairo_ft_scaled_font_lock_face (scaled_font);
+ if (!ft_face)
+ {
+ FcPatternDestroy (match);
+ return Qnil;
+ }
font_object = font_build_object (VECSIZE (struct font_info),
AREF (entity, FONT_TYPE_INDEX),
@@ -231,7 +244,6 @@ ftcrfont_open (struct frame *f, Lisp_Object entity, int pixel_size)
font->descent = font->height - font->ascent;
}
- ft_face = cairo_ft_scaled_font_lock_face (scaled_font);
if (XFIXNUM (AREF (entity, FONT_SIZE_INDEX)) == 0)
{
int upEM = ft_face->units_per_EM;