diff options
author | Pip Cet <pipcet@gmail.com> | 2020-10-22 13:40:34 +0200 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2020-11-07 10:13:07 +0200 |
commit | 0cdd6c9218f7df5793155e86d2028288b9b38bd1 (patch) | |
tree | becc8015452dbfe8f72fd1b9b158849cfc4505fe | |
parent | 29af10afe8be0154a6ce2e538ff50aa1a174c9f0 (diff) | |
download | emacs-0cdd6c9218f7df5793155e86d2028288b9b38bd1.tar.gz |
Handle Cairo errors in ftcrfont_open
* src/ftcrfont.c (ftcrfont_open): Handle Cairo errors (bug#41627).
(cherry picked from commit 954a4decfcc8e41084789516773b22d0adc11d91)
-rw-r--r-- | src/ftcrfont.c | 16 |
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; |