summaryrefslogtreecommitdiffstats
path: root/external/harfbuzz/tdf159529.patch.0
diff options
context:
space:
mode:
Diffstat (limited to 'external/harfbuzz/tdf159529.patch.0')
-rw-r--r--external/harfbuzz/tdf159529.patch.028
1 files changed, 28 insertions, 0 deletions
diff --git a/external/harfbuzz/tdf159529.patch.0 b/external/harfbuzz/tdf159529.patch.0
new file mode 100644
index 0000000000..d76313ce83
--- /dev/null
+++ b/external/harfbuzz/tdf159529.patch.0
@@ -0,0 +1,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;