Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package fcft for openSUSE:Factory checked in at 2025-07-17 17:18:43 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/fcft (Old) and /work/SRC/openSUSE:Factory/.fcft.new.8875 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "fcft" Thu Jul 17 17:18:43 2025 rev:24 rq:1293844 version:3.3.2 Changes: -------- --- /work/SRC/openSUSE:Factory/fcft/fcft.changes 2025-03-17 22:23:10.704482331 +0100 +++ /work/SRC/openSUSE:Factory/.fcft.new.8875/fcft.changes 2025-07-17 17:19:55.010626498 +0200 @@ -1,0 +2,8 @@ +Wed Jul 16 15:06:04 UTC 2025 - Arnav Singh <opens...@arnavion.dev> + +- Updated to 3.3.2: + * Fixed crash when failing to load a font. + * Fixed memory leak in fcft_fini() if the font cache contained entries for + fonts that had failed to load. + +------------------------------------------------------------------- Old: ---- fcft-3.3.1.tar.gz fcft-3.3.1.tar.gz.sig New: ---- fcft-3.3.2.tar.gz fcft-3.3.2.tar.gz.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ fcft.spec ++++++ --- /var/tmp/diff_new_pack.zXBx59/_old 2025-07-17 17:19:55.770658171 +0200 +++ /var/tmp/diff_new_pack.zXBx59/_new 2025-07-17 17:19:55.770658171 +0200 @@ -18,7 +18,7 @@ %define libname libfcft4 Name: fcft -Version: 3.3.1 +Version: 3.3.2 Release: 0 Summary: A library for font loading and glyph rasterization using FreeType/pixman License: MIT ++++++ fcft-3.3.1.tar.gz -> fcft-3.3.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcft-3.3.1/CHANGELOG.md new/fcft-3.3.2/CHANGELOG.md --- old/fcft-3.3.1/CHANGELOG.md 2025-03-13 13:17:15.000000000 +0100 +++ new/fcft-3.3.2/CHANGELOG.md 2025-07-16 11:40:37.000000000 +0200 @@ -1,5 +1,6 @@ # Changelog +* [3.3.2](#3-3-2) * [3.3.1](#3-3-1) * [3.3.0](#3-3-0) * [3.2.0](#3-2-0) @@ -45,6 +46,20 @@ * [1.1.7](#1-1-7) +## 3.3.2 + +### Fixed + +* Crash when failing to load a font. +* Memory leak in `fcft_fini()` if the font cache contained entries for + fonts that failed to load. + + +### Contributors + +* markstos + + ## 3.3.1 ### Fixed diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcft-3.3.1/PKGBUILD new/fcft-3.3.2/PKGBUILD --- old/fcft-3.3.1/PKGBUILD 2025-03-13 13:17:15.000000000 +0100 +++ new/fcft-3.3.2/PKGBUILD 2025-07-16 11:40:37.000000000 +0200 @@ -1,5 +1,5 @@ pkgname=fcft -pkgver=3.3.1 +pkgver=3.3.2 pkgrel=1 pkgdesc="Simple font loading and glyph rasterization library" changelog=CHANGELOG.md diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcft-3.3.1/README.md new/fcft-3.3.2/README.md --- old/fcft-3.3.1/README.md 2025-03-13 13:17:15.000000000 +0100 +++ new/fcft-3.3.2/README.md 2025-07-16 11:40:37.000000000 +0200 @@ -21,7 +21,7 @@ allows foot to make full use of its multiple worker (rendering) threads. -Feature wise, it sits somewhere between Cairo, pango. Compared to +Feature wise, it sits somewhere between Cairo and pango. Compared to Cairo, it does **not** do generic 2D graphics, but it **does** do more advanced font shaping. @@ -207,3 +207,11 @@ fcft uses Unicode data files released under the [Unicode License V3](https://www.unicode.org/license.txt). + + +# Sponsoring/donations + +* Liberapay: https://liberapay.com/dnkl +* GitHub Sponsors: https://github.com/sponsors/dnkl + +[](https://liberapay.com/dnkl/donate) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcft-3.3.1/doc/fcft_capabilities.3.scd new/fcft-3.3.2/doc/fcft_capabilities.3.scd --- old/fcft-3.3.1/doc/fcft_capabilities.3.scd 2025-03-13 13:17:15.000000000 +0100 +++ new/fcft-3.3.2/doc/fcft_capabilities.3.scd 2025-07-16 11:40:37.000000000 +0200 @@ -1,4 +1,4 @@ -fcft_capabilities(3) "3.3.1" "fcft" +fcft_capabilities(3) "3.3.2" "fcft" # NAME diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcft-3.3.1/doc/fcft_clone.3.scd new/fcft-3.3.2/doc/fcft_clone.3.scd --- old/fcft-3.3.1/doc/fcft_clone.3.scd 2025-03-13 13:17:15.000000000 +0100 +++ new/fcft-3.3.2/doc/fcft_clone.3.scd 2025-07-16 11:40:37.000000000 +0200 @@ -1,4 +1,4 @@ -fcft_clone(3) "3.3.1" "fcft" +fcft_clone(3) "3.3.2" "fcft" # NAME diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcft-3.3.1/doc/fcft_destroy.3.scd new/fcft-3.3.2/doc/fcft_destroy.3.scd --- old/fcft-3.3.1/doc/fcft_destroy.3.scd 2025-03-13 13:17:15.000000000 +0100 +++ new/fcft-3.3.2/doc/fcft_destroy.3.scd 2025-07-16 11:40:37.000000000 +0200 @@ -1,4 +1,4 @@ -fcft_destroy(3) "3.3.1" "fcft" +fcft_destroy(3) "3.3.2" "fcft" # NAME diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcft-3.3.1/doc/fcft_fini.3.scd new/fcft-3.3.2/doc/fcft_fini.3.scd --- old/fcft-3.3.1/doc/fcft_fini.3.scd 2025-03-13 13:17:15.000000000 +0100 +++ new/fcft-3.3.2/doc/fcft_fini.3.scd 2025-07-16 11:40:37.000000000 +0200 @@ -1,4 +1,4 @@ -fcft_fini(3) "3.3.1" "fcft" +fcft_fini(3) "3.3.2" "fcft" # NAME diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcft-3.3.1/doc/fcft_font_options_create.3.scd new/fcft-3.3.2/doc/fcft_font_options_create.3.scd --- old/fcft-3.3.1/doc/fcft_font_options_create.3.scd 2025-03-13 13:17:15.000000000 +0100 +++ new/fcft-3.3.2/doc/fcft_font_options_create.3.scd 2025-07-16 11:40:37.000000000 +0200 @@ -1,4 +1,4 @@ -fcft_font_options_create(3) "3.3.1" "fcft" +fcft_font_options_create(3) "3.3.2" "fcft" # NAME diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcft-3.3.1/doc/fcft_font_options_destroy.3.scd new/fcft-3.3.2/doc/fcft_font_options_destroy.3.scd --- old/fcft-3.3.1/doc/fcft_font_options_destroy.3.scd 2025-03-13 13:17:15.000000000 +0100 +++ new/fcft-3.3.2/doc/fcft_font_options_destroy.3.scd 2025-07-16 11:40:37.000000000 +0200 @@ -1,4 +1,4 @@ -fcft_font_options_destroy(3) "3.3.1" "fcft" +fcft_font_options_destroy(3) "3.3.2" "fcft" # NAME diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcft-3.3.1/doc/fcft_from_name.3.scd new/fcft-3.3.2/doc/fcft_from_name.3.scd --- old/fcft-3.3.1/doc/fcft_from_name.3.scd 2025-03-13 13:17:15.000000000 +0100 +++ new/fcft-3.3.2/doc/fcft_from_name.3.scd 2025-07-16 11:40:37.000000000 +0200 @@ -1,4 +1,4 @@ -fcft_from_name(3) "3.3.1" "fcft" +fcft_from_name(3) "3.3.2" "fcft" # NAME diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcft-3.3.1/doc/fcft_from_name2.3.scd new/fcft-3.3.2/doc/fcft_from_name2.3.scd --- old/fcft-3.3.1/doc/fcft_from_name2.3.scd 2025-03-13 13:17:15.000000000 +0100 +++ new/fcft-3.3.2/doc/fcft_from_name2.3.scd 2025-07-16 11:40:37.000000000 +0200 @@ -1,4 +1,4 @@ -fcft_from_name(3) "3.3.1" "fcft" +fcft_from_name(3) "3.3.2" "fcft" # NAME diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcft-3.3.1/doc/fcft_init.3.scd new/fcft-3.3.2/doc/fcft_init.3.scd --- old/fcft-3.3.1/doc/fcft_init.3.scd 2025-03-13 13:17:15.000000000 +0100 +++ new/fcft-3.3.2/doc/fcft_init.3.scd 2025-07-16 11:40:37.000000000 +0200 @@ -1,4 +1,4 @@ -fcft_init(3) "3.3.1" "fcft" +fcft_init(3) "3.3.2" "fcft" # NAME diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcft-3.3.1/doc/fcft_kerning.3.scd new/fcft-3.3.2/doc/fcft_kerning.3.scd --- old/fcft-3.3.1/doc/fcft_kerning.3.scd 2025-03-13 13:17:15.000000000 +0100 +++ new/fcft-3.3.2/doc/fcft_kerning.3.scd 2025-07-16 11:40:37.000000000 +0200 @@ -1,4 +1,4 @@ -fcft_kerning(3) "3.3.1" "fcft" +fcft_kerning(3) "3.3.2" "fcft" # NAME diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcft-3.3.1/doc/fcft_log_init.3.scd new/fcft-3.3.2/doc/fcft_log_init.3.scd --- old/fcft-3.3.1/doc/fcft_log_init.3.scd 2025-03-13 13:17:15.000000000 +0100 +++ new/fcft-3.3.2/doc/fcft_log_init.3.scd 2025-07-16 11:40:37.000000000 +0200 @@ -1,4 +1,4 @@ -fcft_log_init(3) "3.3.1" "fcft" +fcft_log_init(3) "3.3.2" "fcft" # NAME diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcft-3.3.1/doc/fcft_precompose.3.scd new/fcft-3.3.2/doc/fcft_precompose.3.scd --- old/fcft-3.3.1/doc/fcft_precompose.3.scd 2025-03-13 13:17:15.000000000 +0100 +++ new/fcft-3.3.2/doc/fcft_precompose.3.scd 2025-07-16 11:40:37.000000000 +0200 @@ -1,4 +1,4 @@ -fcft_precompose(3) "3.3.1" "fcft" +fcft_precompose(3) "3.3.2" "fcft" # NAME diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcft-3.3.1/doc/fcft_rasterize_char_utf32.3.scd new/fcft-3.3.2/doc/fcft_rasterize_char_utf32.3.scd --- old/fcft-3.3.1/doc/fcft_rasterize_char_utf32.3.scd 2025-03-13 13:17:15.000000000 +0100 +++ new/fcft-3.3.2/doc/fcft_rasterize_char_utf32.3.scd 2025-07-16 11:40:37.000000000 +0200 @@ -1,4 +1,4 @@ -fcft_rasterize_char_utf32(3) "3.3.1" "fcft" +fcft_rasterize_char_utf32(3) "3.3.2" "fcft" # NAME diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcft-3.3.1/doc/fcft_rasterize_grapheme_utf32.3.scd new/fcft-3.3.2/doc/fcft_rasterize_grapheme_utf32.3.scd --- old/fcft-3.3.1/doc/fcft_rasterize_grapheme_utf32.3.scd 2025-03-13 13:17:15.000000000 +0100 +++ new/fcft-3.3.2/doc/fcft_rasterize_grapheme_utf32.3.scd 2025-07-16 11:40:37.000000000 +0200 @@ -1,4 +1,4 @@ -fcft_rasterize_grapheme_utf32(3) "3.3.1" "fcft" +fcft_rasterize_grapheme_utf32(3) "3.3.2" "fcft" # NAME diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcft-3.3.1/doc/fcft_rasterize_text_run_utf32.3.scd new/fcft-3.3.2/doc/fcft_rasterize_text_run_utf32.3.scd --- old/fcft-3.3.1/doc/fcft_rasterize_text_run_utf32.3.scd 2025-03-13 13:17:15.000000000 +0100 +++ new/fcft-3.3.2/doc/fcft_rasterize_text_run_utf32.3.scd 2025-07-16 11:40:37.000000000 +0200 @@ -1,4 +1,4 @@ -fcft_rasterize_text_run_utf32(3) "3.3.1" "fcft" +fcft_rasterize_text_run_utf32(3) "3.3.2" "fcft" # NAME diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcft-3.3.1/doc/fcft_set_emoji_presentation.3.scd new/fcft-3.3.2/doc/fcft_set_emoji_presentation.3.scd --- old/fcft-3.3.1/doc/fcft_set_emoji_presentation.3.scd 2025-03-13 13:17:15.000000000 +0100 +++ new/fcft-3.3.2/doc/fcft_set_emoji_presentation.3.scd 2025-07-16 11:40:37.000000000 +0200 @@ -1,4 +1,4 @@ -fcft_set_emoji_presentation(3) "3.3.1" "fcft" +fcft_set_emoji_presentation(3) "3.3.2" "fcft" # NAME diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcft-3.3.1/doc/fcft_set_scaling_filter.3.scd new/fcft-3.3.2/doc/fcft_set_scaling_filter.3.scd --- old/fcft-3.3.1/doc/fcft_set_scaling_filter.3.scd 2025-03-13 13:17:15.000000000 +0100 +++ new/fcft-3.3.2/doc/fcft_set_scaling_filter.3.scd 2025-07-16 11:40:37.000000000 +0200 @@ -1,4 +1,4 @@ -fcft_set_scaling_filter(3) "3.3.1" "fcft" +fcft_set_scaling_filter(3) "3.3.2" "fcft" # NAME diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcft-3.3.1/doc/fcft_text_run_destroy.3.scd new/fcft-3.3.2/doc/fcft_text_run_destroy.3.scd --- old/fcft-3.3.1/doc/fcft_text_run_destroy.3.scd 2025-03-13 13:17:15.000000000 +0100 +++ new/fcft-3.3.2/doc/fcft_text_run_destroy.3.scd 2025-07-16 11:40:37.000000000 +0200 @@ -1,4 +1,4 @@ -fcft_text_run_destroy(3) "3.3.1" "fcft" +fcft_text_run_destroy(3) "3.3.2" "fcft" # NAME diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcft-3.3.1/example/main.c new/fcft-3.3.2/example/main.c --- old/fcft-3.3.1/example/main.c 2025-03-13 13:17:15.000000000 +0100 +++ new/fcft-3.3.2/example/main.c 2025-07-16 11:40:37.000000000 +0200 @@ -409,6 +409,8 @@ int main(int argc, char *const *argv) { + int exit_code = EXIT_SUCCESS; + const char *locale = setlocale(LC_CTYPE, ""); if (!locale_is_utf8()) { /* Try to force an UTF-8 locale */ @@ -633,11 +635,14 @@ options->emoji_presentation = emoji_presentation; font = fcft_from_name2(tll_length(font_names), names, NULL, options); - assert(font != NULL); - fcft_font_options_destroy(options); tll_free(font_names); free(copy); + + if (font == NULL) { + exit_code = EXIT_FAILURE; + goto err; + } } display = wl_display_connect(NULL); @@ -707,8 +712,6 @@ sigaction(SIGQUIT, &sig_action, NULL); sigaction(SIGTERM, &sig_action, NULL); - int exit_code = EXIT_SUCCESS; - while (!aborted) { wl_display_flush(display); @@ -739,6 +742,7 @@ wl_display_dispatch(display); } +err: if (deco != NULL) zxdg_toplevel_decoration_v1_destroy(deco); if (toplevel != NULL) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcft-3.3.1/fcft.c new/fcft-3.3.2/fcft.c --- old/fcft-3.3.1/fcft.c 2025-03-13 13:17:15.000000000 +0100 +++ new/fcft-3.3.2/fcft.c 2025-07-16 11:40:37.000000000 +0200 @@ -283,10 +283,16 @@ fcft_fini(void) { while (tll_length(font_cache) > 0) { - if (tll_front(font_cache).font == NULL) + struct fcft_font_cache_entry *e = &tll_front(font_cache); + + if (e->font == NULL) { + for (size_t i = 0; i < e->name_count; i++) + free(e->names[i]); + free(e->names); + free(e->attributes); tll_pop_front(font_cache); - else - fcft_destroy(&tll_front(font_cache).font->public); + } else + fcft_destroy(&e->font->public); } assert(tll_length(font_cache) == 0); @@ -1186,16 +1192,12 @@ if (!grapheme_cache_lock_failed) pthread_rwlock_destroy(&font->grapheme_cache_lock); #endif - if (!pattern_failed) - free(primary); + free(primary); free(font); font = NULL; free(glyph_cache_table); free(grapheme_cache_table); fc_destroy: - if (langset != NULL) - FcLangSetDestroy(langset); - FcCharSetDestroy(charset); FcPatternDestroy(pattern); FcPatternDestroy(base_pattern); FcFontSetDestroy(set); @@ -2732,7 +2734,7 @@ } /* Re-alloc glyphs/cluster arrays */ - { + if (run.public->count > 0) { const struct fcft_glyph **final_glyphs = realloc( run.public->glyphs, run.public->count * sizeof(final_glyphs[0])); int *final_cluster = realloc( @@ -2748,6 +2750,12 @@ run.public->glyphs = final_glyphs; run.public->cluster = final_cluster; + } else { + free(run.public->glyphs); + free(run.public->cluster); + + run.public->glyphs = NULL; + run.public->cluster = NULL; } LOG_DBG("glyph count: %zu", run.public->count); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcft-3.3.1/meson.build new/fcft-3.3.2/meson.build --- old/fcft-3.3.1/meson.build 2025-03-13 13:17:15.000000000 +0100 +++ new/fcft-3.3.2/meson.build 2025-07-16 11:40:37.000000000 +0200 @@ -1,5 +1,5 @@ project('fcft', 'c', - version: '3.3.1', # Don't forget to update version in man pages + version: '3.3.2', # Don't forget to update version in man pages license: 'MIT', meson_version: '>=0.58.0', default_options: [ @@ -20,7 +20,7 @@ so_version = [ '4', # MAJOR: increment on non-backward compatible ABI changes '3', # MINOR: increment with backward compatible ABI changes - '1', # PATCH: increment with non-ABI affecting changes + '2', # PATCH: increment with non-ABI affecting changes ] is_debug_build = get_option('buildtype').startswith('debug')