Fix display of compositions when font style changes (Cairo backend)
authorTim Ruffing <dev@real-or-random.org>
Thu, 7 Nov 2024 02:09:09 +0000 (03:09 +0100)
committerEli Zaretskii <eliz@gnu.org>
Fri, 8 Nov 2024 07:56:54 +0000 (09:56 +0200)
* src/ftcrfont.c (ftcrhbfont_end_hb_font): Don't persist the
result of 'cairo_ft_scaled_font_lock_face' in violation of the
API contract.  (Bug#73752)

src/ftcrfont.c

index 5ee375c782b8ee84d38daff404738d6e8ae1cbcc..c2e6785a76a0e8a8621ece5e25348f3d2b45e1ed 100644 (file)
@@ -700,6 +700,13 @@ ftcrhbfont_end_hb_font (struct font *font, hb_font_t *hb_font)
   struct font_info *ftcrfont_info = (struct font_info *) font;
   cairo_scaled_font_t *scaled_font = ftcrfont_info->cr_scaled_font;
 
+  eassert (hb_font == ftcrfont_info->hb_font);
+  /* ftcrfont_info->hb_font holds a reference to the FT_Face returned by
+     cairo_ft_scaled_font_lock_face. Keeping it around after the
+     matching unlock call would violate the API contract (Bug#73752). */
+  hb_font_destroy (ftcrfont_info->hb_font);
+  ftcrfont_info->hb_font = NULL;
+
   cairo_ft_scaled_font_unlock_face (scaled_font);
   ftcrfont_info->ft_size = NULL;
 }