summaryrefslogtreecommitdiffstats
path: root/external/harfbuzz/tdf159529.patch.0
blob: d76313ce83be03e021a598f36a829c8ff29d4181 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
--- ./src/hb-ot-font.cc	2023-11-11 09:08:45
+++ ./src/hb-ot-font.cc	2024-02-20 18:53:55
@@ -428,13 +428,23 @@
   const hb_ot_face_t *ot_face = ot_font->ot_face;
 
 #if !defined(HB_NO_OT_FONT_BITMAP) && !defined(HB_NO_COLOR)
-  if (ot_face->sbix->get_extents (font, glyph, extents)) return true;
+  /* tdf#159529 clear the hb_ot_face_t's data after fetching 'sbix' table
+   * The 'sbix' table can be very large for color emoji fonts so clear any
+   * cached data in hb_ot_face_t after fetching that table's extents. */
+  bool sbixResult = ot_face->sbix->get_extents (font, glyph, extents);
+  const_cast<hb_ot_face_t*>(ot_face)->sbix.fini ();
+  if (sbixResult) return true;
   if (ot_face->CBDT->get_extents (font, glyph, extents)) return true;
 #endif
 #if !defined(HB_NO_COLOR) && !defined(HB_NO_PAINT)
   if (ot_face->COLR->get_extents (font, glyph, extents)) return true;
 #endif
-  if (ot_face->glyf->get_extents (font, glyph, extents)) return true;
+  /* tdf#159529 clear the hb_ot_face_t's data after fetching 'glyf' table
+   * The 'glyf' table can be very large for color emoji fonts so clear any
+   * cached data in hb_ot_face_t after fetching that table's extents. */
+  bool glyfResult = ot_face->glyf->get_extents (font, glyph, extents);
+  const_cast<hb_ot_face_t*>(ot_face)->glyf.fini ();
+  if (glyfResult) return true;
 #ifndef HB_NO_OT_FONT_CFF
   if (ot_face->cff2->get_extents (font, glyph, extents)) return true;
   if (ot_face->cff1->get_extents (font, glyph, extents)) return true;