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-12-28 19:19:26
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/fcft (Old)
 and      /work/SRC/openSUSE:Factory/.fcft.new.1928 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "fcft"

Sun Dec 28 19:19:26 2025 rev:25 rq:1324500 version:3.3.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/fcft/fcft.changes        2025-07-17 
17:19:55.010626498 +0200
+++ /work/SRC/openSUSE:Factory/.fcft.new.1928/fcft.changes      2025-12-28 
19:19:44.512238451 +0100
@@ -1,0 +2,7 @@
+Sat Dec 27 18:48:51 UTC 2025 - Arnav Singh <[email protected]>
+
+- Update to 3.3.3:
+  * Failure to set LCD filter is no longer fatal
+  * COLRv1 fonts are now rejected or ignored as they are not supported.
+
+-------------------------------------------------------------------

Old:
----
  fcft-3.3.2.tar.gz
  fcft-3.3.2.tar.gz.sig

New:
----
  fcft-3.3.3.tar.gz
  fcft-3.3.3.tar.gz.sig

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ fcft.spec ++++++
--- /var/tmp/diff_new_pack.ErGKTU/_old  2025-12-28 19:19:45.364273434 +0100
+++ /var/tmp/diff_new_pack.ErGKTU/_new  2025-12-28 19:19:45.368273598 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package fcft
 #
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2025 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 %define libname libfcft4
 Name:           fcft
-Version:        3.3.2
+Version:        3.3.3
 Release:        0
 Summary:        A library for font loading and glyph rasterization using 
FreeType/pixman
 License:        MIT

++++++ fcft-3.3.2.tar.gz -> fcft-3.3.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcft-3.3.2/CHANGELOG.md new/fcft-3.3.3/CHANGELOG.md
--- old/fcft-3.3.2/CHANGELOG.md 2025-07-16 11:40:37.000000000 +0200
+++ new/fcft-3.3.3/CHANGELOG.md 2025-12-27 12:27:58.000000000 +0100
@@ -1,5 +1,6 @@
 # Changelog
 
+* [3.3.3](#3-3-3)
 * [3.3.2](#3-3-2)
 * [3.3.1](#3-3-1)
 * [3.3.0](#3-3-0)
@@ -46,6 +47,16 @@
 * [1.1.7](#1-1-7)
 
 
+## 3.3.3
+
+### Changed
+
+* Failure to set LCD filter is no longer fatal
+* Reject COLRv1 fonts; they are not supported. If the primary font is
+  a COLRv1 font, error out. If a fallback font is COLRv1, skip it, and
+  try the next fallback font instead.
+
+
 ## 3.3.2
 
 ### Fixed
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcft-3.3.2/PKGBUILD new/fcft-3.3.3/PKGBUILD
--- old/fcft-3.3.2/PKGBUILD     2025-07-16 11:40:37.000000000 +0200
+++ new/fcft-3.3.3/PKGBUILD     2025-12-27 12:27:58.000000000 +0100
@@ -1,5 +1,5 @@
 pkgname=fcft
-pkgver=3.3.2
+pkgver=3.3.3
 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.2/README.md new/fcft-3.3.3/README.md
--- old/fcft-3.3.2/README.md    2025-07-16 11:40:37.000000000 +0200
+++ new/fcft-3.3.3/README.md    2025-12-27 12:27:58.000000000 +0100
@@ -103,6 +103,7 @@
 ## Not supported
 
 * Subpixel positioning
+* COLRv1
 
 Remember, this is a _simple_ library, not a full blown layout engine.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcft-3.3.2/doc/fcft_capabilities.3.scd 
new/fcft-3.3.3/doc/fcft_capabilities.3.scd
--- old/fcft-3.3.2/doc/fcft_capabilities.3.scd  2025-07-16 11:40:37.000000000 
+0200
+++ new/fcft-3.3.3/doc/fcft_capabilities.3.scd  2025-12-27 12:27:58.000000000 
+0100
@@ -1,4 +1,4 @@
-fcft_capabilities(3) "3.3.2" "fcft"
+fcft_capabilities(3) "3.3.3" "fcft"
 
 # NAME
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcft-3.3.2/doc/fcft_clone.3.scd 
new/fcft-3.3.3/doc/fcft_clone.3.scd
--- old/fcft-3.3.2/doc/fcft_clone.3.scd 2025-07-16 11:40:37.000000000 +0200
+++ new/fcft-3.3.3/doc/fcft_clone.3.scd 2025-12-27 12:27:58.000000000 +0100
@@ -1,4 +1,4 @@
-fcft_clone(3) "3.3.2" "fcft"
+fcft_clone(3) "3.3.3" "fcft"
 
 # NAME
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcft-3.3.2/doc/fcft_destroy.3.scd 
new/fcft-3.3.3/doc/fcft_destroy.3.scd
--- old/fcft-3.3.2/doc/fcft_destroy.3.scd       2025-07-16 11:40:37.000000000 
+0200
+++ new/fcft-3.3.3/doc/fcft_destroy.3.scd       2025-12-27 12:27:58.000000000 
+0100
@@ -1,4 +1,4 @@
-fcft_destroy(3) "3.3.2" "fcft"
+fcft_destroy(3) "3.3.3" "fcft"
 
 # NAME
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcft-3.3.2/doc/fcft_fini.3.scd 
new/fcft-3.3.3/doc/fcft_fini.3.scd
--- old/fcft-3.3.2/doc/fcft_fini.3.scd  2025-07-16 11:40:37.000000000 +0200
+++ new/fcft-3.3.3/doc/fcft_fini.3.scd  2025-12-27 12:27:58.000000000 +0100
@@ -1,4 +1,4 @@
-fcft_fini(3) "3.3.2" "fcft"
+fcft_fini(3) "3.3.3" "fcft"
 
 # NAME
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcft-3.3.2/doc/fcft_font_options_create.3.scd 
new/fcft-3.3.3/doc/fcft_font_options_create.3.scd
--- old/fcft-3.3.2/doc/fcft_font_options_create.3.scd   2025-07-16 
11:40:37.000000000 +0200
+++ new/fcft-3.3.3/doc/fcft_font_options_create.3.scd   2025-12-27 
12:27:58.000000000 +0100
@@ -1,4 +1,4 @@
-fcft_font_options_create(3) "3.3.2" "fcft"
+fcft_font_options_create(3) "3.3.3" "fcft"
 
 # NAME
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcft-3.3.2/doc/fcft_font_options_destroy.3.scd 
new/fcft-3.3.3/doc/fcft_font_options_destroy.3.scd
--- old/fcft-3.3.2/doc/fcft_font_options_destroy.3.scd  2025-07-16 
11:40:37.000000000 +0200
+++ new/fcft-3.3.3/doc/fcft_font_options_destroy.3.scd  2025-12-27 
12:27:58.000000000 +0100
@@ -1,4 +1,4 @@
-fcft_font_options_destroy(3) "3.3.2" "fcft"
+fcft_font_options_destroy(3) "3.3.3" "fcft"
 
 # NAME
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcft-3.3.2/doc/fcft_from_name.3.scd 
new/fcft-3.3.3/doc/fcft_from_name.3.scd
--- old/fcft-3.3.2/doc/fcft_from_name.3.scd     2025-07-16 11:40:37.000000000 
+0200
+++ new/fcft-3.3.3/doc/fcft_from_name.3.scd     2025-12-27 12:27:58.000000000 
+0100
@@ -1,4 +1,4 @@
-fcft_from_name(3) "3.3.2" "fcft"
+fcft_from_name(3) "3.3.3" "fcft"
 
 # NAME
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcft-3.3.2/doc/fcft_from_name2.3.scd 
new/fcft-3.3.3/doc/fcft_from_name2.3.scd
--- old/fcft-3.3.2/doc/fcft_from_name2.3.scd    2025-07-16 11:40:37.000000000 
+0200
+++ new/fcft-3.3.3/doc/fcft_from_name2.3.scd    2025-12-27 12:27:58.000000000 
+0100
@@ -1,4 +1,4 @@
-fcft_from_name(3) "3.3.2" "fcft"
+fcft_from_name(3) "3.3.3" "fcft"
 
 # NAME
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcft-3.3.2/doc/fcft_init.3.scd 
new/fcft-3.3.3/doc/fcft_init.3.scd
--- old/fcft-3.3.2/doc/fcft_init.3.scd  2025-07-16 11:40:37.000000000 +0200
+++ new/fcft-3.3.3/doc/fcft_init.3.scd  2025-12-27 12:27:58.000000000 +0100
@@ -1,4 +1,4 @@
-fcft_init(3) "3.3.2" "fcft"
+fcft_init(3) "3.3.3" "fcft"
 
 # NAME
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcft-3.3.2/doc/fcft_kerning.3.scd 
new/fcft-3.3.3/doc/fcft_kerning.3.scd
--- old/fcft-3.3.2/doc/fcft_kerning.3.scd       2025-07-16 11:40:37.000000000 
+0200
+++ new/fcft-3.3.3/doc/fcft_kerning.3.scd       2025-12-27 12:27:58.000000000 
+0100
@@ -1,4 +1,4 @@
-fcft_kerning(3) "3.3.2" "fcft"
+fcft_kerning(3) "3.3.3" "fcft"
 
 # NAME
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcft-3.3.2/doc/fcft_log_init.3.scd 
new/fcft-3.3.3/doc/fcft_log_init.3.scd
--- old/fcft-3.3.2/doc/fcft_log_init.3.scd      2025-07-16 11:40:37.000000000 
+0200
+++ new/fcft-3.3.3/doc/fcft_log_init.3.scd      2025-12-27 12:27:58.000000000 
+0100
@@ -1,4 +1,4 @@
-fcft_log_init(3) "3.3.2" "fcft"
+fcft_log_init(3) "3.3.3" "fcft"
 
 # NAME
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcft-3.3.2/doc/fcft_precompose.3.scd 
new/fcft-3.3.3/doc/fcft_precompose.3.scd
--- old/fcft-3.3.2/doc/fcft_precompose.3.scd    2025-07-16 11:40:37.000000000 
+0200
+++ new/fcft-3.3.3/doc/fcft_precompose.3.scd    2025-12-27 12:27:58.000000000 
+0100
@@ -1,4 +1,4 @@
-fcft_precompose(3) "3.3.2" "fcft"
+fcft_precompose(3) "3.3.3" "fcft"
 
 # NAME
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcft-3.3.2/doc/fcft_rasterize_char_utf32.3.scd 
new/fcft-3.3.3/doc/fcft_rasterize_char_utf32.3.scd
--- old/fcft-3.3.2/doc/fcft_rasterize_char_utf32.3.scd  2025-07-16 
11:40:37.000000000 +0200
+++ new/fcft-3.3.3/doc/fcft_rasterize_char_utf32.3.scd  2025-12-27 
12:27:58.000000000 +0100
@@ -1,4 +1,4 @@
-fcft_rasterize_char_utf32(3) "3.3.2" "fcft"
+fcft_rasterize_char_utf32(3) "3.3.3" "fcft"
 
 # NAME
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcft-3.3.2/doc/fcft_rasterize_grapheme_utf32.3.scd 
new/fcft-3.3.3/doc/fcft_rasterize_grapheme_utf32.3.scd
--- old/fcft-3.3.2/doc/fcft_rasterize_grapheme_utf32.3.scd      2025-07-16 
11:40:37.000000000 +0200
+++ new/fcft-3.3.3/doc/fcft_rasterize_grapheme_utf32.3.scd      2025-12-27 
12:27:58.000000000 +0100
@@ -1,4 +1,4 @@
-fcft_rasterize_grapheme_utf32(3) "3.3.2" "fcft"
+fcft_rasterize_grapheme_utf32(3) "3.3.3" "fcft"
 
 # NAME
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcft-3.3.2/doc/fcft_rasterize_text_run_utf32.3.scd 
new/fcft-3.3.3/doc/fcft_rasterize_text_run_utf32.3.scd
--- old/fcft-3.3.2/doc/fcft_rasterize_text_run_utf32.3.scd      2025-07-16 
11:40:37.000000000 +0200
+++ new/fcft-3.3.3/doc/fcft_rasterize_text_run_utf32.3.scd      2025-12-27 
12:27:58.000000000 +0100
@@ -1,4 +1,4 @@
-fcft_rasterize_text_run_utf32(3) "3.3.2" "fcft"
+fcft_rasterize_text_run_utf32(3) "3.3.3" "fcft"
 
 # NAME
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcft-3.3.2/doc/fcft_set_emoji_presentation.3.scd 
new/fcft-3.3.3/doc/fcft_set_emoji_presentation.3.scd
--- old/fcft-3.3.2/doc/fcft_set_emoji_presentation.3.scd        2025-07-16 
11:40:37.000000000 +0200
+++ new/fcft-3.3.3/doc/fcft_set_emoji_presentation.3.scd        2025-12-27 
12:27:58.000000000 +0100
@@ -1,4 +1,4 @@
-fcft_set_emoji_presentation(3) "3.3.2" "fcft"
+fcft_set_emoji_presentation(3) "3.3.3" "fcft"
 
 # NAME
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcft-3.3.2/doc/fcft_set_scaling_filter.3.scd 
new/fcft-3.3.3/doc/fcft_set_scaling_filter.3.scd
--- old/fcft-3.3.2/doc/fcft_set_scaling_filter.3.scd    2025-07-16 
11:40:37.000000000 +0200
+++ new/fcft-3.3.3/doc/fcft_set_scaling_filter.3.scd    2025-12-27 
12:27:58.000000000 +0100
@@ -1,4 +1,4 @@
-fcft_set_scaling_filter(3) "3.3.2" "fcft"
+fcft_set_scaling_filter(3) "3.3.3" "fcft"
 
 # NAME
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcft-3.3.2/doc/fcft_text_run_destroy.3.scd 
new/fcft-3.3.3/doc/fcft_text_run_destroy.3.scd
--- old/fcft-3.3.2/doc/fcft_text_run_destroy.3.scd      2025-07-16 
11:40:37.000000000 +0200
+++ new/fcft-3.3.3/doc/fcft_text_run_destroy.3.scd      2025-12-27 
12:27:58.000000000 +0100
@@ -1,4 +1,4 @@
-fcft_text_run_destroy(3) "3.3.2" "fcft"
+fcft_text_run_destroy(3) "3.3.3" "fcft"
 
 # NAME
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcft-3.3.2/fcft.c new/fcft-3.3.3/fcft.c
--- old/fcft-3.3.2/fcft.c       2025-07-16 11:40:37.000000000 +0200
+++ new/fcft-3.3.3/fcft.c       2025-12-27 12:27:58.000000000 +0100
@@ -1,12 +1,13 @@
 #include "fcft/fcft.h"
 
-#include <stdlib.h>
-#include <stdint.h>
-#include <stdbool.h>
-#include <math.h>
 #include <assert.h>
-#include <threads.h>
+#include <byteswap.h>
 #include <locale.h>
+#include <math.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <threads.h>
 
 #include <wchar.h>  /* TODO: remove */
 
@@ -18,6 +19,7 @@
 #include FT_LCD_FILTER_H
 #include FT_TRUETYPE_TABLES_H
 #include FT_SYNTHESIS_H
+#include FT_TRUETYPE_TAGS_H
 #include <fontconfig/fontconfig.h>
 
 #if defined(FCFT_HAVE_HARFBUZZ)
@@ -589,7 +591,7 @@
 
 static bool
 instantiate_pattern(FcPattern *pattern, double req_pt_size, double req_px_size,
-                    struct instance *font)
+                    struct instance *font, bool is_primary)
 {
     FcChar8 *face_file = NULL;
     if (FcPatternGetString(pattern, FC_FT_FACE, 0, &face_file) != 
FcResultMatch &&
@@ -647,6 +649,56 @@
         goto err_done_face;
     }
 
+    do {
+        /*
+         * Detect (and reject) COLRv1 fonts by reading the COLR table
+         * and checking the version field.
+         *
+         * // Big-endian
+         * struct COLRHeaderV0 {
+         *     uint16_t version;
+         *     uint16_t numBaseGlyphRecords;
+         *     uint32_t baseGlyphRecordsOffset;
+         *     uint32_t layerRecordsOffset;
+         * };
+         *
+         * struct COLRHeaderV1 {
+         *     struct COLRHeaderV0 v0;
+         *     uint32_t clipListOffset;
+         *     uint32_t varIndexMapOffset;
+         *     uint32_t itemVariationStoreOffset;
+         * };
+         */
+
+        uint16_t version;
+        FT_ULong length = sizeof(version);
+
+        if ((ft_err = FT_Load_Sfnt_Table(ft_face, TTAG_COLR, 0, (FT_Byte 
*)&version, &length)) != FT_Err_Ok) {
+            /* Stay silent, and assume we failed simply because the table 
doesn't exist */
+            //LOG_ERR("%s: failed to load COLR table: %s", face_file, 
FT_Error_String(ft_err));
+            break;
+        }
+
+        if (length < sizeof(version)) {
+            LOG_ERR("%s: failed to read version field from the COLR table", 
face_file);
+            goto err_done_face;
+        }
+
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+        version = bswap_16(version);
+#endif
+
+        LOG_DBG("%s: COLR: version=%d", version);
+
+        if (version >= 1) {
+            if (is_primary)
+                LOG_ERR("%s: COLRv1 not supported", face_file);
+            else
+                LOG_WARN("%s: skipping, COLRv1 not supported", face_file);
+            goto err_done_face;
+        }
+    } while (0);
+
     FcBool scalable;
     if (FcPatternGetBool(pattern, FC_SCALABLE, 0, &scalable) != FcResultMatch)
         scalable = FcTrue;
@@ -767,6 +819,8 @@
     if (FcPatternGetInteger(pattern, FC_LCD_FILTER, 0, &fc_lcdfilter) != 
FcResultMatch)
         fc_lcdfilter = FC_LCD_DEFAULT;
 
+    font->lcd_filter = FT_LCD_FILTER_DEFAULT;
+
     switch (fc_lcdfilter) {
     case FC_LCD_NONE:    font->lcd_filter = FT_LCD_FILTER_NONE; break;
     case FC_LCD_DEFAULT: font->lcd_filter = FT_LCD_FILTER_DEFAULT; break;
@@ -1153,7 +1207,7 @@
 
             struct instance *primary = malloc(sizeof(*primary));
             if (primary == NULL ||
-                !instantiate_pattern(pattern, req_pt_size, req_px_size, 
primary))
+                !instantiate_pattern(pattern, req_pt_size, req_px_size, 
primary, true))
             {
                 ;
             } else
@@ -1383,9 +1437,8 @@
         FT_Error err = FT_Library_SetLcdFilter(ft_lib, inst->lcd_filter);
 
         if (err != FT_Err_Ok) {
-            LOG_ERR("failed to set LCD filter: %s", ft_error_string(err));
-            mtx_unlock(&ft_lock);
-            goto err;
+            LOG_WARN("failed to set LCD filter (%d): %s",
+                     inst->lcd_filter, ft_error_string(err));
         }
     }
 
@@ -2037,7 +2090,7 @@
             if (!instantiate_pattern(
                     it->item.pattern,
                     it->item.req_pt_size, it->item.req_px_size,
-                    inst))
+                    inst, false))
             {
                 /* Remove, so that we don't have to keep trying to
                  * instantiate it */
@@ -2291,7 +2344,7 @@
                 if (!instantiate_pattern(
                         it->item.pattern,
                         it->item.req_pt_size, it->item.req_px_size,
-                        *inst))
+                        *inst, false))
                 {
                     /* Remove, so that we don't have to keep trying to
                      * instantiate it */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fcft-3.3.2/meson.build new/fcft-3.3.3/meson.build
--- old/fcft-3.3.2/meson.build  2025-07-16 11:40:37.000000000 +0200
+++ new/fcft-3.3.3/meson.build  2025-12-27 12:27:58.000000000 +0100
@@ -1,5 +1,5 @@
 project('fcft', 'c',
-        version: '3.3.2',  # Don't forget to update version in man pages
+        version: '3.3.3',  # 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
-  '2',      # PATCH: increment with non-ABI affecting changes
+  '3',      # PATCH: increment with non-ABI affecting changes
 ]
 
 is_debug_build = get_option('buildtype').startswith('debug')

Reply via email to