Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package harfbuzz for openSUSE:Factory checked in at 2025-08-27 21:33:21 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/harfbuzz (Old) and /work/SRC/openSUSE:Factory/.harfbuzz.new.30751 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "harfbuzz" Wed Aug 27 21:33:21 2025 rev:127 rq:1301466 version:11.4.4 Changes: -------- --- /work/SRC/openSUSE:Factory/harfbuzz/harfbuzz.changes 2025-08-25 20:36:59.005289077 +0200 +++ /work/SRC/openSUSE:Factory/.harfbuzz.new.30751/harfbuzz.changes 2025-08-27 21:33:28.643667617 +0200 @@ -1,0 +2,9 @@ +Mon Aug 25 22:06:32 UTC 2025 - Bjørn Lie <[email protected]> + +- Update to version 11.4.4: + + Fix a shaping regression affecting mark glyphs in certain + fonts. + + Fix pruning of mark filtering sets when subsetting fonts, which + caused changes in shaping behaviour. + +------------------------------------------------------------------- Old: ---- harfbuzz-11.4.3.obscpio New: ---- harfbuzz-11.4.4.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ harfbuzz.spec ++++++ --- /var/tmp/diff_new_pack.Qelrii/_old 2025-08-27 21:33:29.547705415 +0200 +++ /var/tmp/diff_new_pack.Qelrii/_new 2025-08-27 21:33:29.551705583 +0200 @@ -18,7 +18,7 @@ Name: harfbuzz -Version: 11.4.3 +Version: 11.4.4 Release: 0 Summary: An OpenType text shaping engine License: MIT ++++++ _service ++++++ --- /var/tmp/diff_new_pack.Qelrii/_old 2025-08-27 21:33:29.583706921 +0200 +++ /var/tmp/diff_new_pack.Qelrii/_new 2025-08-27 21:33:29.587707089 +0200 @@ -3,7 +3,7 @@ <service name="obs_scm" mode="manual"> <param name="scm">git</param> <param name="url">https://github.com/harfbuzz/harfbuzz.git</param> - <param name="revision">11.4.3</param> + <param name="revision">11.4.4</param> <param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param> <param name="versionrewrite-pattern">v?(.*)\+0</param> <param name="versionrewrite-replacement">\1</param> ++++++ harfbuzz-11.4.3.obscpio -> harfbuzz-11.4.4.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-11.4.3/.ci/requirements.in new/harfbuzz-11.4.4/.ci/requirements.in --- old/harfbuzz-11.4.3/.ci/requirements.in 2025-08-23 10:48:18.000000000 +0200 +++ new/harfbuzz-11.4.4/.ci/requirements.in 2025-08-25 23:57:35.000000000 +0200 @@ -1,4 +1,4 @@ -r requirements-fonttools.in -meson==1.7.0 +meson==1.9.0 ninja setuptools # https://github.com/harfbuzz/harfbuzz/issues/4475 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-11.4.3/.ci/requirements.txt new/harfbuzz-11.4.4/.ci/requirements.txt --- old/harfbuzz-11.4.3/.ci/requirements.txt 2025-08-23 10:48:18.000000000 +0200 +++ new/harfbuzz-11.4.4/.ci/requirements.txt 2025-08-25 23:57:35.000000000 +0200 @@ -64,9 +64,9 @@ --hash=sha256:efbec204fa9f877641747f2d9612b2b656071390d7a7ef07a9dbf0ecf9c7195c \ --hash=sha256:fb13823a74b3a9204a8ed76d3d6d5ec12e64cc5bc44914eb9ff1cdac04facd43 # via -r requirements-fonttools.in -meson==1.7.0 \ - --hash=sha256:08efbe84803eed07f863b05092d653a9d348f7038761d900412fddf56deb0284 \ - --hash=sha256:ae3f12953045f3c7c60e27f2af1ad862f14dee125b4ed9bcb8a842a5080dbf85 +meson==1.9.0 \ + --hash=sha256:45e51ddc41e37d961582d06e78c48e0f9039011587f3495c4d6b0781dad92357 \ + --hash=sha256:cd27277649b5ed50d19875031de516e270b22e890d9db65ed9af57d18ebc498d # via -r requirements.in ninja==1.13.0 \ --hash=sha256:11be2d22027bde06f14c343f01d31446747dbb51e72d00decca2eb99be911e2f \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-11.4.3/.github/workflows/scorecard.yml new/harfbuzz-11.4.4/.github/workflows/scorecard.yml --- old/harfbuzz-11.4.3/.github/workflows/scorecard.yml 2025-08-23 10:48:18.000000000 +0200 +++ new/harfbuzz-11.4.4/.github/workflows/scorecard.yml 2025-08-25 23:57:35.000000000 +0200 @@ -59,6 +59,6 @@ # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@df559355d593797519d70b90fc8edd5db049e7a2 # v3.29.5 + uses: github/codeql-action/upload-sarif@3c3833e0f8c1c83d449a7478aa59c036a9165498 # v3.29.5 with: sarif_file: results.sarif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-11.4.3/NEWS new/harfbuzz-11.4.4/NEWS --- old/harfbuzz-11.4.3/NEWS 2025-08-23 10:48:18.000000000 +0200 +++ new/harfbuzz-11.4.4/NEWS 2025-08-25 23:57:35.000000000 +0200 @@ -1,3 +1,10 @@ +Overview of changes leading to 11.4.4 +Tuesday, August 26, 2025 +===================================== +- Fix a shaping regression affecting mark glyphs in certain fonts. +- Fix pruning of mark filtering sets when subsetting fonts, which caused changes in shaping behaviour. + + Overview of changes leading to 11.4.3 Saturday, August 23, 2025 ==================================== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-11.4.3/meson.build new/harfbuzz-11.4.4/meson.build --- old/harfbuzz-11.4.3/meson.build 2025-08-23 10:48:18.000000000 +0200 +++ new/harfbuzz-11.4.4/meson.build 2025-08-25 23:57:35.000000000 +0200 @@ -1,6 +1,6 @@ project('harfbuzz', ['c', 'cpp'], meson_version: '>= 0.60.0', - version: '11.4.3', + version: '11.4.4', default_options: [ 'cpp_eh=none', # Just to support msvc, we are passing -fno-exceptions also anyway # 'cpp_rtti=false', # Do NOT enable, wraps inherit it and ICU needs RTTI diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-11.4.3/src/OT/Layout/GSUB/Ligature.hh new/harfbuzz-11.4.4/src/OT/Layout/GSUB/Ligature.hh --- old/harfbuzz-11.4.3/src/OT/Layout/GSUB/Ligature.hh 2025-08-23 10:48:18.000000000 +0200 +++ new/harfbuzz-11.4.4/src/OT/Layout/GSUB/Ligature.hh 2025-08-25 23:57:35.000000000 +0200 @@ -47,7 +47,13 @@ template <typename set_t> void collect_second (set_t &s) const { - s.add (component[1]); // This adds codepoint 0 if component array is empty. + if (unlikely (!component.get_length ())) + { + // A ligature without any components. Anything matches. + s = set_t::full (); + return; + } + s.add (component.arrayZ[0]); } bool would_apply (hb_would_apply_context_t *c) const diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-11.4.3/src/hb-coretext-font.cc new/harfbuzz-11.4.4/src/hb-coretext-font.cc --- old/harfbuzz-11.4.3/src/hb-coretext-font.cc 2025-08-23 10:48:18.000000000 +0200 +++ new/harfbuzz-11.4.4/src/hb-coretext-font.cc 2025-08-25 23:57:35.000000000 +0200 @@ -410,8 +410,8 @@ return false; CFIndex len = CFStringGetLength (cf_name); - if (len > size - 1) - len = size - 1; + if (len > (CFIndex)size - 1) + len = (CFIndex)size - 1; CFStringGetBytes (cf_name, CFRangeMake (0, len), kCFStringEncodingUTF8, 0, false, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-11.4.3/src/hb-coretext.cc new/harfbuzz-11.4.4/src/hb-coretext.cc --- old/harfbuzz-11.4.3/src/hb-coretext.cc 2025-08-23 10:48:18.000000000 +0200 +++ new/harfbuzz-11.4.4/src/hb-coretext.cc 2025-08-25 23:57:35.000000000 +0200 @@ -167,8 +167,8 @@ } else named_instance_index--; - auto ct_font_desc = (CFArrayGetCount (ct_font_desc_array) > named_instance_index) ? - (CTFontDescriptorRef) CFArrayGetValueAtIndex (ct_font_desc_array, named_instance_index) : nullptr; + auto ct_font_desc = (CFArrayGetCount (ct_font_desc_array) > (CFIndex) named_instance_index) ? + (CTFontDescriptorRef) CFArrayGetValueAtIndex (ct_font_desc_array, (CFIndex) named_instance_index) : nullptr; if (unlikely (!ct_font_desc)) { CFRelease (ct_font_desc_array); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-11.4.3/src/hb-harfrust.cc new/harfbuzz-11.4.4/src/hb-harfrust.cc --- old/harfbuzz-11.4.3/src/hb-harfrust.cc 2025-08-23 10:48:18.000000000 +0200 +++ new/harfbuzz-11.4.4/src/hb-harfrust.cc 2025-08-25 23:57:35.000000000 +0200 @@ -176,17 +176,20 @@ } } - // Encode buffer context as UTF-8, so that HarfRust can use it. + // Encode buffer pre/post-context as UTF-8, so that HarfRust can use it. constexpr int CONTEXT_BYTE_SIZE = 4 * hb_buffer_t::CONTEXT_LENGTH; - uint8_t context[2][CONTEXT_BYTE_SIZE]; - unsigned context_len[2] = { 0, 0 }; - for (unsigned i = 0; i < 2; i++) - for (unsigned j = 0; j < buffer->context_len[i]; j++) - { - context_len[i] = hb_utf8_t::encode (context[i] + context_len[i], - context[i] + CONTEXT_BYTE_SIZE, - buffer->context[i][j]) - context[i]; - } + uint8_t pre_context[CONTEXT_BYTE_SIZE]; + unsigned pre_context_len = 0; + for (unsigned i = buffer->context_len[0]; i; i--) + pre_context_len = hb_utf8_t::encode (pre_context + pre_context_len, + pre_context + CONTEXT_BYTE_SIZE, + buffer->context[0][i - 1]) - pre_context; + uint8_t post_context[CONTEXT_BYTE_SIZE]; + unsigned post_context_len = 0; + for (unsigned i = 0; i < buffer->context_len[1]; i++) + post_context_len = hb_utf8_t::encode (post_context + post_context_len, + post_context + CONTEXT_BYTE_SIZE, + buffer->context[1][i]) - post_context; return _hb_harfrust_shape_rs (font_data, face_data, @@ -194,10 +197,10 @@ hr_buffer, font, buffer, - context[0], - context_len[0], - context[1], - context_len[1], + pre_context, + pre_context_len, + post_context, + post_context_len, features, num_features); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-11.4.3/src/hb-ot-layout-common.hh new/harfbuzz-11.4.4/src/hb-ot-layout-common.hh --- old/harfbuzz-11.4.3/src/hb-ot-layout-common.hh 2025-08-23 10:48:18.000000000 +0200 +++ new/harfbuzz-11.4.4/src/hb-ot-layout-common.hh 2025-08-25 23:57:35.000000000 +0200 @@ -1387,6 +1387,11 @@ { unsigned new_flag = lookupFlag; new_flag &= ~LookupFlag::UseMarkFilteringSet; + // https://github.com/harfbuzz/harfbuzz/issues/5499 + // If we remove UseMarkFilteringSet flag because the set is now empty, + // we need to add IgnoreMarks flag, otherwise the lookup will not + // ignore any marks, which changes the behavior. + new_flag |= LookupFlag::IgnoreMarks; out->lookupFlag = new_flag; } else diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-11.4.3/src/hb-ot-layout-gsubgpos.hh new/harfbuzz-11.4.4/src/hb-ot-layout-gsubgpos.hh --- old/harfbuzz-11.4.3/src/hb-ot-layout-gsubgpos.hh 2025-08-23 10:48:18.000000000 +0200 +++ new/harfbuzz-11.4.4/src/hb-ot-layout-gsubgpos.hh 2025-08-25 23:57:35.000000000 +0200 @@ -470,7 +470,7 @@ } public: - unsigned int lookup_props = (unsigned) -1; + unsigned int lookup_props = 0; hb_mask_t mask = -1; bool ignore_zwnj = false; bool ignore_zwj = false; @@ -720,8 +720,7 @@ hb_direction_t direction; hb_mask_t lookup_mask = 1; unsigned int lookup_index = (unsigned) -1; - unsigned int lookup_props = (unsigned) -1; - unsigned int cached_props = (unsigned) -1; /* Cached glyph properties for the current lookup. */ + unsigned int lookup_props = 0; unsigned int nesting_level_left = HB_MAX_NESTING_LEVEL; bool has_glyph_classes; @@ -795,18 +794,13 @@ HB_HOT bool match_properties_mark (const hb_glyph_info_t *info, unsigned int glyph_props, - unsigned int match_props, - bool cached) const + unsigned int match_props) const { /* If using mark filtering sets, the high short of * match_props has the set index. */ if (match_props & LookupFlag::UseMarkFilteringSet) - { - if (cached && match_props == cached_props) - return _hb_glyph_info_matches (info); return gdef_accel.mark_set_covers (match_props >> 16, info->codepoint); - } /* The second byte of match_props has the meaning * "ignore marks of attachment type different than @@ -822,8 +816,7 @@ HB_ALWAYS_INLINE #endif bool check_glyph_property (const hb_glyph_info_t *info, - unsigned match_props, - bool cached = true) const + unsigned match_props) const { unsigned int glyph_props = _hb_glyph_info_get_glyph_props (info); @@ -834,7 +827,7 @@ return false; if (unlikely (glyph_props & HB_OT_LAYOUT_GLYPH_PROPS_MARK)) - return match_properties_mark (info, glyph_props, match_props, cached); + return match_properties_mark (info, glyph_props, match_props); return true; } @@ -876,10 +869,6 @@ } else _hb_glyph_info_set_glyph_props (&buffer->cur(), props); - - if (cached_props != (unsigned) -1) - _hb_glyph_info_set_matches (&buffer->cur(), - check_glyph_property (&buffer->cur(), cached_props, false)); } void replace_glyph (hb_codepoint_t glyph_index) @@ -1391,7 +1380,7 @@ if (ligbase == LIGBASE_NOT_CHECKED) { bool found = false; - auto *out = buffer->out_info; + const auto *out = buffer->out_info; unsigned int j = buffer->out_len; while (j && _hb_glyph_info_get_lig_id (&out[j - 1]) == first_lig_id) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-11.4.3/src/hb-ot-layout.cc new/harfbuzz-11.4.4/src/hb-ot-layout.cc --- old/harfbuzz-11.4.3/src/hb-ot-layout.cc 2025-08-23 10:48:18.000000000 +0200 +++ new/harfbuzz-11.4.4/src/hb-ot-layout.cc 2025-08-25 23:57:35.000000000 +0200 @@ -1967,29 +1967,13 @@ const OT::hb_ot_layout_lookup_accelerator_t &accel) { hb_buffer_t *buffer = c->buffer; - unsigned subtable_count = lookup.get_subtable_count (); if (unlikely (!buffer->len || !c->lookup_mask)) return false; bool ret = false; - unsigned lookup_props = lookup.get_props (); - if (lookup_props != c->cached_props) - { - bool cache_it = subtable_count > 1 && (lookup_props & OT::LookupFlag::UseMarkFilteringSet); - if (cache_it) - { - auto &info = buffer->info; - for (unsigned int i = 0; i < buffer->len; i++) - _hb_glyph_info_set_matches (&info[i], - c->check_glyph_property (&info[i], lookup_props, false)); - c->cached_props = lookup_props; - } - else - c->cached_props = (unsigned) -1; - } - c->set_lookup_props (lookup_props); + c->set_lookup_props (lookup.get_props ()); if (likely (!lookup.is_reverse ())) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-11.4.3/src/hb-ot-layout.hh new/harfbuzz-11.4.4/src/hb-ot-layout.hh --- old/harfbuzz-11.4.3/src/hb-ot-layout.hh 2025-08-23 10:48:18.000000000 +0200 +++ new/harfbuzz-11.4.4/src/hb-ot-layout.hh 2025-08-25 23:57:35.000000000 +0200 @@ -81,10 +81,9 @@ HB_OT_LAYOUT_GLYPH_PROPS_MARK = 0x08u, /* The following are used internally; not derived from GDEF. */ - HB_OT_LAYOUT_GLYPH_PROPS_MATCHES = 0x10u, - HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED = 0x20u, - HB_OT_LAYOUT_GLYPH_PROPS_LIGATED = 0x40u, - HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED = 0x80u, + HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED = 0x10u, + HB_OT_LAYOUT_GLYPH_PROPS_LIGATED = 0x20u, + HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED = 0x40u, HB_OT_LAYOUT_GLYPH_PROPS_PRESERVE = HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED | HB_OT_LAYOUT_GLYPH_PROPS_LIGATED | @@ -611,20 +610,6 @@ return false; } -static inline bool -_hb_glyph_info_matches (const hb_glyph_info_t *info) -{ - return info->glyph_props() & HB_OT_LAYOUT_GLYPH_PROPS_MATCHES; -} -static inline void -_hb_glyph_info_set_matches (hb_glyph_info_t *info, bool matches) -{ - if (matches) - info->glyph_props() |= HB_OT_LAYOUT_GLYPH_PROPS_MATCHES; - else - info->glyph_props() &= ~HB_OT_LAYOUT_GLYPH_PROPS_MATCHES; -} - /* Allocation / deallocation. */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-11.4.3/src/hb-version.h new/harfbuzz-11.4.4/src/hb-version.h --- old/harfbuzz-11.4.3/src/hb-version.h 2025-08-23 10:48:18.000000000 +0200 +++ new/harfbuzz-11.4.4/src/hb-version.h 2025-08-25 23:57:35.000000000 +0200 @@ -53,14 +53,14 @@ * * The micro component of the library version available at compile-time. */ -#define HB_VERSION_MICRO 3 +#define HB_VERSION_MICRO 4 /** * HB_VERSION_STRING: * * A string literal containing the library version available at compile-time. */ -#define HB_VERSION_STRING "11.4.3" +#define HB_VERSION_STRING "11.4.4" /** * HB_VERSION_ATLEAST: Binary files old/harfbuzz-11.4.3/test/subset/data/expected/layout.markfilteringset/AmiriQuran.layout-test.0649,064E,0647,0627.ttf and new/harfbuzz-11.4.4/test/subset/data/expected/layout.markfilteringset/AmiriQuran.layout-test.0649,064E,0647,0627.ttf differ Binary files old/harfbuzz-11.4.3/test/subset/data/fonts/AmiriQuran.ttf and new/harfbuzz-11.4.4/test/subset/data/fonts/AmiriQuran.ttf differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-11.4.3/test/subset/data/tests/layout.markfilteringset.tests new/harfbuzz-11.4.4/test/subset/data/tests/layout.markfilteringset.tests --- old/harfbuzz-11.4.3/test/subset/data/tests/layout.markfilteringset.tests 1970-01-01 01:00:00.000000000 +0100 +++ new/harfbuzz-11.4.4/test/subset/data/tests/layout.markfilteringset.tests 2025-08-25 23:57:35.000000000 +0200 @@ -0,0 +1,11 @@ +FONTS: +AmiriQuran.ttf + +PROFILES: +layout-test.txt + +SUBSETS: +U+0649,U+064E,U+0647,U+0627 + +OPTIONS: +no_fonttools diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/harfbuzz-11.4.3/test/subset/meson.build new/harfbuzz-11.4.4/test/subset/meson.build --- old/harfbuzz-11.4.3/test/subset/meson.build 2025-08-23 10:48:18.000000000 +0200 +++ new/harfbuzz-11.4.4/test/subset/meson.build 2025-08-25 23:57:35.000000000 +0200 @@ -33,6 +33,7 @@ 'layout.context_format2', 'layout.gdef-varstore', 'layout.gdef-attachlist', + 'layout.markfilteringset', 'layout.notonastaliqurdu', 'layout.tinos', 'layout.duplicate_features', ++++++ harfbuzz.obsinfo ++++++ --- /var/tmp/diff_new_pack.Qelrii/_old 2025-08-27 21:33:35.075936555 +0200 +++ /var/tmp/diff_new_pack.Qelrii/_new 2025-08-27 21:33:35.079936722 +0200 @@ -1,5 +1,5 @@ name: harfbuzz -version: 11.4.3 -mtime: 1755938898 -commit: 9ac9af2554486bb72769e51dc29c05ab65009b42 +version: 11.4.4 +mtime: 1756159055 +commit: 3420ef0212b5aec3946d4185f7bcc6d65fc7a32e
