Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package chafa for openSUSE:Factory checked 
in at 2022-06-20 15:38:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/chafa (Old)
 and      /work/SRC/openSUSE:Factory/.chafa.new.1548 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "chafa"

Mon Jun 20 15:38:30 2022 rev:15 rq:983868 version:1.12.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/chafa/chafa.changes      2022-06-06 
12:38:49.259315498 +0200
+++ /work/SRC/openSUSE:Factory/.chafa.new.1548/chafa.changes    2022-06-20 
15:39:18.775038276 +0200
@@ -1,0 +2,16 @@
+Mon Jun 20 07:53:37 UTC 2022 - Michael Vetter <mvet...@suse.com>
+
+- Update to 1.12.1:
+  * Increased GLib minimum version to 2.20.
+  * Added 12 new test inputs, including bad inputs to handle gracefully.
+  * Added a few symbols to API documentation that were accidentally left out.
+  * Bug fixes:
+    + huntr.dev CVE-2022-2061: Out-of-bounds read in libnsgif's lzw_decode()
+    + [unfiled] Undefined behavior in libnsgif due to uninitialized frame 
fields.
+    + [unfiled] Signed integer overflow in chafa_pack_color().
+    + [unfiled] Integer overflow in normalization pass on some images.
+    + [unfiled] Potential unaligned access with corrupt XWD images.
+    + [unfiled] Integer overflow in quantization on some images.
+    + [unfiled] Calculating offset from NULL pointer in LodePNG.
+
+-------------------------------------------------------------------

Old:
----
  chafa-1.12.0.tar.xz

New:
----
  chafa-1.12.1.tar.xz

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

Other differences:
------------------
++++++ chafa.spec ++++++
--- /var/tmp/diff_new_pack.nv9lCO/_old  2022-06-20 15:39:19.239038954 +0200
+++ /var/tmp/diff_new_pack.nv9lCO/_new  2022-06-20 15:39:19.243038960 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           chafa
-Version:        1.12.0
+Version:        1.12.1
 Release:        0
 Summary:        Image-to-text converter for terminal
 License:        LGPL-3.0-or-later
@@ -27,7 +27,7 @@
 BuildRequires:  ImageMagick-devel
 BuildRequires:  freetype2-devel
 BuildRequires:  gcc
-BuildRequires:  glib2-devel
+BuildRequires:  glib2-devel >= 2.20
 BuildRequires:  gtk-doc
 BuildRequires:  libtool
 Requires:       libchafa0 = %{version}

++++++ chafa-1.12.0.tar.xz -> chafa-1.12.1.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/AUTHORS new/chafa-1.12.1/AUTHORS
--- old/chafa-1.12.0/AUTHORS    2022-03-17 05:24:37.000000000 +0100
+++ new/chafa-1.12.1/AUTHORS    2022-06-20 00:24:42.000000000 +0200
@@ -24,5 +24,6 @@
 Robert-Andr?? Mauchin <zebo...@gmail.com>
 Roman Wagner <roman.wag...@pm.me>
 Sotiris Papatheodorou <soti...@papatheodorou.xyz>
+Sudhakar Verma <svermai...@gmail.com>
 Tim Gates <tim.ga...@iress.com>
 ??yvind Kol??s <pip...@gimp.org>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/NEWS new/chafa-1.12.1/NEWS
--- old/chafa-1.12.0/NEWS       2022-06-06 01:55:57.000000000 +0200
+++ new/chafa-1.12.1/NEWS       2022-06-20 00:24:42.000000000 +0200
@@ -1,6 +1,28 @@
 Chafa releases
 ==============
 
+1.12.1 (2022-06-20)
+-------------------
+
+This release fixes one important input validation bug and several instances of
+undefined behavior revealed by fuzzing.
+
+* Increased GLib minimum version to 2.20.
+
+* Added 12 new test inputs, including bad inputs to handle gracefully.
+
+* Added a few symbols to API documentation that were accidentally left out.
+
+* Bug fixes:
+  huntr.dev  CVE-2022-2061: Out-of-bounds read in libnsgif's lzw_decode()
+             (Sudhakar Verma of CrowdStrike).
+  [unfiled]  Undefined behavior in libnsgif due to uninitialized frame fields.
+  [unfiled]  Signed integer overflow in chafa_pack_color().
+  [unfiled]  Integer overflow in normalization pass on some images.
+  [unfiled]  Potential unaligned access with corrupt XWD images.
+  [unfiled]  Integer overflow in quantization on some images.
+  [unfiled]  Calculating offset from NULL pointer in LodePNG.
+
 1.12.0 (2022-06-06)
 -------------------
 
@@ -33,7 +55,7 @@
   .ANS files compatible with utilities like the wonderful Ansilove, e.g:
 
   $ chafa -f symbols -c 16/8 -s 80 --symbols space+solid+half --fill stipple \
-      in.jpg | tr -d '\n' | iconv -c -f utf8 -t cp432 > out.ans
+      in.jpg | tr -d '\n' | iconv -c -f utf8 -t cp437 > out.ans
   $ ansilove out.ans -o out.png
 
 * New builtin Latin symbols (available with --symbols latin). This class
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/chafa/Makefile.am 
new/chafa-1.12.1/chafa/Makefile.am
--- old/chafa-1.12.0/chafa/Makefile.am  2022-06-06 02:07:03.000000000 +0200
+++ new/chafa-1.12.1/chafa/Makefile.am  2022-06-20 00:24:42.000000000 +0200
@@ -9,7 +9,7 @@
 noinst_HEADERS =
 
 libchafa_la_CFLAGS = $(LIBCHAFA_CFLAGS) $(GLIB_CFLAGS) -DCHAFA_COMPILATION
-libchafa_la_LDFLAGS = $(LIBCHAFA_LDFLAGS) -version-info 8:0:8
+libchafa_la_LDFLAGS = $(LIBCHAFA_LDFLAGS) -version-info 8:1:8
 libchafa_la_LIBADD = $(GLIB_LIBS) internal/libchafa-internal.la -lm
 
 libchafa_la_SOURCES = \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/chafa/Makefile.in 
new/chafa-1.12.1/chafa/Makefile.in
--- old/chafa-1.12.0/chafa/Makefile.in  2022-06-06 02:42:44.000000000 +0200
+++ new/chafa-1.12.1/chafa/Makefile.in  2022-06-20 00:27:51.000000000 +0200
@@ -434,7 +434,7 @@
 # produce documentation.
 noinst_HEADERS = chafa-term-seq-doc.h chafa-term-seq-doc-in.h
 libchafa_la_CFLAGS = $(LIBCHAFA_CFLAGS) $(GLIB_CFLAGS) -DCHAFA_COMPILATION
-libchafa_la_LDFLAGS = $(LIBCHAFA_LDFLAGS) -version-info 8:0:8
+libchafa_la_LDFLAGS = $(LIBCHAFA_LDFLAGS) -version-info 8:1:8
 libchafa_la_LIBADD = $(GLIB_LIBS) internal/libchafa-internal.la -lm
 libchafa_la_SOURCES = \
        chafa-canvas.c \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/chafa/internal/chafa-color-table.c 
new/chafa-1.12.1/chafa/internal/chafa-color-table.c
--- old/chafa-1.12.0/chafa/internal/chafa-color-table.c 2022-05-31 
01:01:59.000000000 +0200
+++ new/chafa-1.12.1/chafa/internal/chafa-color-table.c 2022-06-15 
00:13:28.000000000 +0200
@@ -192,19 +192,22 @@
 
 static inline gboolean
 refine_pen_choice (const ChafaColorTable *color_table, guint want_color, const 
gint *v, gint j,
-                   gint *best_pen, gint *best_diff)
+                   gint *best_pen, gint64 *best_diff)
 {
     const ChafaColorTableEntry *pj = &color_table->entries [j];
-    gint a, b, d;
+    gint64 a, b, d;
 
-    a = POW2 (pj->v [0] - v [0]);
+    a = POW2 ((gint64) pj->v [0] - v [0]);
 
     profile_counter_inc (n_a);
     DEBUG_PEN_CHOICE (g_printerr ("a=%d\n", a));
 
     if (a <= *best_diff)
     {
-        b = POW2 (pj->v [1] - v [1]);
+        /* TODO: When using gint32, the POW2 multiplication can result in 
overflow.
+         * Our workaround is to use gint64 for best_diff, a, b and d. This 
probably
+         * slows us down, though (we should measure). Is there a better fix? */
+        b = POW2 ((gint64) pj->v [1] - v [1]);
 
         profile_counter_inc (n_b);
         DEBUG_PEN_CHOICE (g_printerr ("b=%d\n", b));
@@ -312,7 +315,7 @@
 gint
 chafa_color_table_find_nearest_pen (const ChafaColorTable *color_table, 
guint32 want_color)
 {
-    gint best_diff = G_MAXINT;
+    gint64 best_diff = G_MAXINT64;
     gint best_pen = 0;
     gint v [2];
     gint i, j, m;
@@ -359,12 +362,12 @@
 
 #if CHAFA_COLOR_TABLE_ENABLE_PROFILING
     gint best_pen_2 = -1;
-    gint best_diff_2 = G_MAXINT;
+    gint64 best_diff_2 = G_MAXINT64;
 
     for (i = 0; i < color_table->n_entries; i++)
     {
         const ChafaColorTableEntry *pi = &color_table->entries [i];
-        gint d = color_diff (color_table->pens [pi->pen], want_color);
+        gint64 d = color_diff (color_table->pens [pi->pen], want_color);
 
         if (d < best_diff_2)
         {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/chafa/internal/chafa-color.c 
new/chafa-1.12.1/chafa/internal/chafa-color.c
--- old/chafa-1.12.0/chafa/internal/chafa-color.c       2022-05-31 
01:01:58.000000000 +0200
+++ new/chafa-1.12.1/chafa/internal/chafa-color.c       2022-06-15 
00:13:28.000000000 +0200
@@ -30,10 +30,10 @@
 chafa_pack_color (const ChafaColor *color)
 {
     /* Assumes each channel 0 <= value <= 255 */
-    return (color->ch [0] << 16)
-            | (color->ch [1] << 8)
-            | (color->ch [2])
-            | (color->ch [3] << 24);  /* Alpha */
+    return ((guint32) color->ch [0] << 16)
+            | ((guint32) color->ch [1] << 8)
+            | ((guint32) color->ch [2])
+            | ((guint32) color->ch [3] << 24);  /* Alpha */
 }
 
 void
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/chafa/internal/chafa-pixops.c 
new/chafa-1.12.1/chafa/internal/chafa-pixops.c
--- old/chafa-1.12.0/chafa/internal/chafa-pixops.c      2022-05-31 
01:01:58.000000000 +0200
+++ new/chafa-1.12.1/chafa/internal/chafa-pixops.c      2022-06-15 
00:13:28.000000000 +0200
@@ -24,7 +24,7 @@
 #include "internal/smolscale/smolscale.h"
 
 /* Fixed point multiplier */
-#define FIXED_MULT 16384
+#define FIXED_MULT 4096
 
 /* See rgb_to_intensity_fast () */
 #define INTENSITY_MAX (256 * 8)
@@ -34,6 +34,10 @@
 #define INDEXED_8_CROP_PCT  10
 #define INDEXED_2_CROP_PCT  20
 
+/* Ensure there's no overflow in normalize_ch() */
+G_STATIC_ASSERT (FIXED_MULT * INTENSITY_MAX * (gint64) 255 <= G_MAXINT);
+G_STATIC_ASSERT (FIXED_MULT * INTENSITY_MAX * (gint64) -255 >= G_MININT);
+
 typedef struct
 {
     gint32 c [INTENSITY_MAX];
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/configure new/chafa-1.12.1/configure
--- old/chafa-1.12.0/configure  2022-06-06 02:42:45.000000000 +0200
+++ new/chafa-1.12.1/configure  2022-06-20 00:27:52.000000000 +0200
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for chafa 1.12.0.
+# Generated by GNU Autoconf 2.69 for chafa 1.12.1.
 #
 # Report bugs to <h...@hpjansson.org>.
 #
@@ -590,8 +590,8 @@
 # Identity of this package.
 PACKAGE_NAME='chafa'
 PACKAGE_TARNAME='chafa'
-PACKAGE_VERSION='1.12.0'
-PACKAGE_STRING='chafa 1.12.0'
+PACKAGE_VERSION='1.12.1'
+PACKAGE_STRING='chafa 1.12.1'
 PACKAGE_BUGREPORT='h...@hpjansson.org'
 PACKAGE_URL=''
 
@@ -1423,7 +1423,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures chafa 1.12.0 to adapt to many kinds of systems.
+\`configure' configures chafa 1.12.1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1493,7 +1493,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of chafa 1.12.0:";;
+     short | recursive ) echo "Configuration of chafa 1.12.1:";;
    esac
   cat <<\_ACEOF
 
@@ -1648,7 +1648,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-chafa configure 1.12.0
+chafa configure 1.12.1
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2017,7 +2017,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by chafa $as_me 1.12.0, which was
+It was created by chafa $as_me 1.12.1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2875,7 +2875,7 @@
 
 # Define the identity of the package.
  PACKAGE='chafa'
- VERSION='1.12.0'
+ VERSION='1.12.1'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -2977,8 +2977,8 @@
 
 CHAFA_MAJOR_VERSION=1
 CHAFA_MINOR_VERSION=12
-CHAFA_MICRO_VERSION=0
-CHAFA_VERSION=1.12.0
+CHAFA_MICRO_VERSION=1
+CHAFA_VERSION=1.12.1
 
 
 
@@ -2992,7 +2992,7 @@
 $as_echo "#define CHAFA_MINOR_VERSION 12" >>confdefs.h
 
 
-$as_echo "#define CHAFA_MICRO_VERSION 0" >>confdefs.h
+$as_echo "#define CHAFA_MICRO_VERSION 1" >>confdefs.h
 
 
 cat >>confdefs.h <<_ACEOF
@@ -13690,12 +13690,12 @@
     pkg_cv_GLIB_CFLAGS="$GLIB_CFLAGS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists 
--print-errors \"glib-2.0 >= 2.10\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.10") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists 
--print-errors \"glib-2.0 >= 2.20\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.20") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.10" 2>/dev/null`
+  pkg_cv_GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.20" 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -13707,12 +13707,12 @@
     pkg_cv_GLIB_LIBS="$GLIB_LIBS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists 
--print-errors \"glib-2.0 >= 2.10\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.10") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists 
--print-errors \"glib-2.0 >= 2.20\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.20") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_GLIB_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.10" 2>/dev/null`
+  pkg_cv_GLIB_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.20" 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -13733,14 +13733,14 @@
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-               GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors 
--cflags --libs "glib-2.0 >= 2.10" 2>&1`
+               GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors 
--cflags --libs "glib-2.0 >= 2.20" 2>&1`
         else
-               GLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs 
"glib-2.0 >= 2.10" 2>&1`
+               GLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs 
"glib-2.0 >= 2.20" 2>&1`
         fi
        # Put the nasty error message in config.log where it belongs
        echo "$GLIB_PKG_ERRORS" >&5
 
-       as_fn_error $? "Package requirements (glib-2.0 >= 2.10) were not met:
+       as_fn_error $? "Package requirements (glib-2.0 >= 2.20) were not met:
 
 $GLIB_PKG_ERRORS
 
@@ -16153,7 +16153,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by chafa $as_me 1.12.0, which was
+This file was extended by chafa $as_me 1.12.1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -16219,7 +16219,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-chafa config.status 1.12.0
+chafa config.status 1.12.1
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/configure.ac 
new/chafa-1.12.1/configure.ac
--- old/chafa-1.12.0/configure.ac       2022-06-06 02:04:28.000000000 +0200
+++ new/chafa-1.12.1/configure.ac       2022-06-20 00:24:42.000000000 +0200
@@ -6,7 +6,7 @@
 
 m4_define([chafa_major_version], [1])
 m4_define([chafa_minor_version], [12])
-m4_define([chafa_micro_version], [0])
+m4_define([chafa_micro_version], [1])
 
 m4_define([chafa_version], 
[chafa_major_version.chafa_minor_version.chafa_micro_version])
 
@@ -74,7 +74,7 @@
 
 dnl --- Dependency check ---
 
-PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.10)
+PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.20)
 
 AC_ARG_WITH(tools,
   [AS_HELP_STRING([--without-tools], [don't build command-line tools 
[default=on]])],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/docs/chafa-sections.txt 
new/chafa-1.12.1/docs/chafa-sections.txt
--- old/chafa-1.12.0/docs/chafa-sections.txt    2022-06-06 03:06:41.000000000 
+0200
+++ new/chafa-1.12.1/docs/chafa-sections.txt    2022-06-20 00:28:07.000000000 
+0200
@@ -75,6 +75,9 @@
 chafa_get_builtin_features
 chafa_get_supported_features
 chafa_describe_features
+chafa_get_n_threads
+chafa_set_n_threads
+chafa_get_n_actual_threads
 </SECTION>
 
 <SECTION>
@@ -94,6 +97,7 @@
 chafa_symbol_map_apply_selectors
 chafa_symbol_map_get_allow_builtin_glyphs
 chafa_symbol_map_set_allow_builtin_glyphs
+chafa_symbol_map_get_glyph
 chafa_symbol_map_add_glyph
 </SECTION>
 
@@ -106,6 +110,8 @@
 CHAFA_VERSION_1_4
 CHAFA_VERSION_1_6
 CHAFA_VERSION_1_8
+CHAFA_VERSION_1_10
+CHAFA_VERSION_1_12
 ChafaPixelType
 chafa_calc_canvas_geometry
 </SECTION>
@@ -155,7 +161,11 @@
 chafa_term_info_emit_disable_insert
 chafa_term_info_emit_enable_wrap
 chafa_term_info_emit_disable_wrap
+chafa_term_info_emit_enable_bold
 chafa_term_info_emit_invert_colors
+chafa_term_info_emit_set_color_bg_8
+chafa_term_info_emit_set_color_fg_8
+chafa_term_info_emit_set_color_fgbg_8
 chafa_term_info_emit_set_color_fg_16
 chafa_term_info_emit_set_color_bg_16
 chafa_term_info_emit_set_color_fgbg_16
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/docs/chafa.1 
new/chafa-1.12.1/docs/chafa.1
--- old/chafa-1.12.0/docs/chafa.1       2022-06-06 02:43:02.000000000 +0200
+++ new/chafa-1.12.1/docs/chafa.1       2022-06-20 00:28:04.000000000 +0200
@@ -2,7 +2,7 @@
 .\"     Title: chafa
 .\"    Author: Hans Petter Jansson
 .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
-.\"      Date: 06/06/2022
+.\"      Date: 06/20/2022
 .\"    Manual: User Commands
 .\"    Source: chafa
 .\"  Language: English
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/docs/html/api-index-full.html 
new/chafa-1.12.1/docs/html/api-index-full.html
--- old/chafa-1.12.0/docs/html/api-index-full.html      2022-06-06 
03:06:41.000000000 +0200
+++ new/chafa-1.12.1/docs/html/api-index-full.html      2022-06-20 
00:28:07.000000000 +0200
@@ -302,6 +302,14 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="chafa-Features.html#chafa-get-n-actual-threads" 
title="chafa_get_n_actual_threads??()">chafa_get_n_actual_threads</a>, function 
in <a class="link" href="chafa-Features.html" title="Features">Features</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="chafa-Features.html#chafa-get-n-threads" 
title="chafa_get_n_threads??()">chafa_get_n_threads</a>, function in <a 
class="link" href="chafa-Features.html" title="Features">Features</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="chafa-Features.html#chafa-get-supported-features" 
title="chafa_get_supported_features??()">chafa_get_supported_features</a>, 
function in <a class="link" href="chafa-Features.html" 
title="Features">Features</a>
 </dt>
 <dd></dd>
@@ -321,6 +329,10 @@
 <dd></dd>
 <a name="idxS"></a><h3 class="title">S</h3>
 <dt>
+<a class="link" href="chafa-Features.html#chafa-set-n-threads" 
title="chafa_set_n_threads??()">chafa_set_n_threads</a>, function in <a 
class="link" href="chafa-Features.html" title="Features">Features</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="chafa-ChafaSymbolMap.html#ChafaSymbolMap" 
title="ChafaSymbolMap">ChafaSymbolMap</a>, typedef in <a class="link" 
href="chafa-ChafaSymbolMap.html" title="ChafaSymbolMap">ChafaSymbolMap</a>
 </dt>
 <dd></dd>
@@ -357,6 +369,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="chafa-ChafaSymbolMap.html#chafa-symbol-map-get-glyph" 
title="chafa_symbol_map_get_glyph??()">chafa_symbol_map_get_glyph</a>, function 
in <a class="link" href="chafa-ChafaSymbolMap.html" 
title="ChafaSymbolMap">ChafaSymbolMap</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="chafa-ChafaSymbolMap.html#chafa-symbol-map-new" 
title="chafa_symbol_map_new??()">chafa_symbol_map_new</a>, function in <a 
class="link" href="chafa-ChafaSymbolMap.html" 
title="ChafaSymbolMap">ChafaSymbolMap</a>
 </dt>
 <dd></dd>
@@ -534,6 +550,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" 
href="chafa-ChafaTermInfo.html#chafa-term-info-emit-enable-bold" 
title="chafa_term_info_emit_enable_bold??()">chafa_term_info_emit_enable_bold</a>,
 function in <a class="link" href="chafa-ChafaTermInfo.html" 
title="ChafaTermInfo">ChafaTermInfo</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" 
href="chafa-ChafaTermInfo.html#chafa-term-info-emit-enable-cursor" 
title="chafa_term_info_emit_enable_cursor??()">chafa_term_info_emit_enable_cursor</a>,
 function in <a class="link" href="chafa-ChafaTermInfo.html" 
title="ChafaTermInfo">ChafaTermInfo</a>
 </dt>
 <dd></dd>
@@ -606,6 +626,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" 
href="chafa-ChafaTermInfo.html#chafa-term-info-emit-set-color-bg-8" 
title="chafa_term_info_emit_set_color_bg_8??()">chafa_term_info_emit_set_color_bg_8</a>,
 function in <a class="link" href="chafa-ChafaTermInfo.html" 
title="ChafaTermInfo">ChafaTermInfo</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" 
href="chafa-ChafaTermInfo.html#chafa-term-info-emit-set-color-bg-direct" 
title="chafa_term_info_emit_set_color_bg_direct??()">chafa_term_info_emit_set_color_bg_direct</a>,
 function in <a class="link" href="chafa-ChafaTermInfo.html" 
title="ChafaTermInfo">ChafaTermInfo</a>
 </dt>
 <dd></dd>
@@ -618,6 +642,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" 
href="chafa-ChafaTermInfo.html#chafa-term-info-emit-set-color-fgbg-8" 
title="chafa_term_info_emit_set_color_fgbg_8??()">chafa_term_info_emit_set_color_fgbg_8</a>,
 function in <a class="link" href="chafa-ChafaTermInfo.html" 
title="ChafaTermInfo">ChafaTermInfo</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" 
href="chafa-ChafaTermInfo.html#chafa-term-info-emit-set-color-fgbg-direct" 
title="chafa_term_info_emit_set_color_fgbg_direct??()">chafa_term_info_emit_set_color_fgbg_direct</a>,
 function in <a class="link" href="chafa-ChafaTermInfo.html" 
title="ChafaTermInfo">ChafaTermInfo</a>
 </dt>
 <dd></dd>
@@ -630,6 +658,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" 
href="chafa-ChafaTermInfo.html#chafa-term-info-emit-set-color-fg-8" 
title="chafa_term_info_emit_set_color_fg_8??()">chafa_term_info_emit_set_color_fg_8</a>,
 function in <a class="link" href="chafa-ChafaTermInfo.html" 
title="ChafaTermInfo">ChafaTermInfo</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" 
href="chafa-ChafaTermInfo.html#chafa-term-info-emit-set-color-fg-direct" 
title="chafa_term_info_emit_set_color_fg_direct??()">chafa_term_info_emit_set_color_fg_direct</a>,
 function in <a class="link" href="chafa-ChafaTermInfo.html" 
title="ChafaTermInfo">ChafaTermInfo</a>
 </dt>
 <dd></dd>
@@ -679,6 +711,14 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="chafa-Miscellaneous.html#CHAFA-VERSION-1-10:CAPS" 
title="CHAFA_VERSION_1_10">CHAFA_VERSION_1_10</a>, macro in <a class="link" 
href="chafa-Miscellaneous.html" title="Miscellaneous">Miscellaneous</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="chafa-Miscellaneous.html#CHAFA-VERSION-1-12:CAPS" 
title="CHAFA_VERSION_1_12">CHAFA_VERSION_1_12</a>, macro in <a class="link" 
href="chafa-Miscellaneous.html" title="Miscellaneous">Miscellaneous</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="chafa-Miscellaneous.html#CHAFA-VERSION-1-2:CAPS" 
title="CHAFA_VERSION_1_2">CHAFA_VERSION_1_2</a>, macro in <a class="link" 
href="chafa-Miscellaneous.html" title="Miscellaneous">Miscellaneous</a>
 </dt>
 <dd></dd>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/docs/html/chafa-ChafaSymbolMap.html 
new/chafa-1.12.1/docs/html/chafa-ChafaSymbolMap.html
--- old/chafa-1.12.0/docs/html/chafa-ChafaSymbolMap.html        2022-06-06 
03:06:41.000000000 +0200
+++ new/chafa-1.12.1/docs/html/chafa-ChafaSymbolMap.html        2022-06-20 
00:28:07.000000000 +0200
@@ -129,6 +129,14 @@
 </tr>
 <tr>
 <td class="function_type">
+<a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span 
class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="chafa-ChafaSymbolMap.html#chafa-symbol-map-get-glyph" 
title="chafa_symbol_map_get_glyph??()">chafa_symbol_map_get_glyph</a>??<span 
class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
 <span class="returnvalue">void</span>
 </td>
 <td class="function_name">
@@ -533,6 +541,85 @@
 </div>
 <hr>
 <div class="refsect2">
+<a 
name="chafa-symbol-map-get-glyph"></a><h3>chafa_symbol_map_get_glyph??()</h3>
+<pre class="programlisting"><a 
href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span 
class="returnvalue">gboolean</span></a>
+chafa_symbol_map_get_glyph (<em class="parameter"><code><a class="link" 
href="chafa-ChafaSymbolMap.html#ChafaSymbolMap" title="ChafaSymbolMap"><span 
class="type">ChafaSymbolMap</span></a> *symbol_map</code></em>,
+                            <em class="parameter"><code><a 
href="/usr/share/gtk-doc/html/glib/glib-Unicode-Manipulation.html#gunichar"><span
 class="type">gunichar</span></a> code_point</code></em>,
+                            <em class="parameter"><code><a class="link" 
href="chafa-Miscellaneous.html#ChafaPixelType" title="enum 
ChafaPixelType"><span class="type">ChafaPixelType</span></a> 
pixel_format</code></em>,
+                            <em class="parameter"><code><a 
href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span 
class="type">gpointer</span></a> *pixels_out</code></em>,
+                            <em class="parameter"><code><a 
href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span 
class="type">gint</span></a> *width_out</code></em>,
+                            <em class="parameter"><code><a 
href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span 
class="type">gint</span></a> *height_out</code></em>,
+                            <em class="parameter"><code><a 
href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span 
class="type">gint</span></a> *rowstride_out</code></em>);</pre>
+<p>Returns data for the glyph corresponding to <em 
class="parameter"><code>code_point</code></em>
+ stored in <em class="parameter"><code>symbol_map</code></em>
+.
+Any of <em class="parameter"><code>pixels_out</code></em>
+, <em class="parameter"><code>width_out</code></em>
+, <em class="parameter"><code>height_out</code></em>
+ and <em class="parameter"><code>rowstride_out</code></em>
+ can be NULL,
+in which case the corresponding data is not retrieved.</p>
+<p>If <em class="parameter"><code>pixels_out</code></em>
+ is not NULL, a pointer to freshly allocated memory containing
+height * rowstride bytes in the pixel format specified by <em 
class="parameter"><code>pixel_format</code></em>
+
+will be stored at this address. It must be freed using <a 
href="/usr/share/gtk-doc/html/glib/glib-Memory-Allocation.html#g-free"><code 
class="function">g_free()</code></a> when you're
+done with it.</p>
+<p>Monochrome glyphs (the only kind currently supported) will be rendered as
+opaque white on a transparent black background (0xffffffff for inked
+pixels and 0x00000000 for uninked).</p>
+<div class="refsect3">
+<a name="chafa-symbol-map-get-glyph.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" 
border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>symbol_map</p></td>
+<td class="parameter_description"><p>A symbol map</p></td>
+<td class="parameter_annotations">??</td>
+</tr>
+<tr>
+<td class="parameter_name"><p>code_point</p></td>
+<td class="parameter_description"><p>A Unicode code point</p></td>
+<td class="parameter_annotations">??</td>
+</tr>
+<tr>
+<td class="parameter_name"><p>pixel_format</p></td>
+<td class="parameter_description"><p>Desired pixel format of <em 
class="parameter"><code>pixels_out</code></em>
+</p></td>
+<td class="parameter_annotations">??</td>
+</tr>
+<tr>
+<td class="parameter_name"><p>pixels_out</p></td>
+<td class="parameter_description"><p>Storage for a pointer to exported glyph 
data</p></td>
+<td class="parameter_annotations">??</td>
+</tr>
+<tr>
+<td class="parameter_name"><p>width_out</p></td>
+<td class="parameter_description"><p>Storage for width of glyph, in 
pixels</p></td>
+<td class="parameter_annotations">??</td>
+</tr>
+<tr>
+<td class="parameter_name"><p>height_out</p></td>
+<td class="parameter_description"><p>Storage for height of glyph, in 
pixels</p></td>
+<td class="parameter_annotations">??</td>
+</tr>
+<tr>
+<td class="parameter_name"><p>rowstride_out</p></td>
+<td class="parameter_description"><p>Storage for offset from start of one row 
to the next, in bytes</p></td>
+<td class="parameter_annotations">??</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.12</p>
+</div>
+<hr>
+<div class="refsect2">
 <a 
name="chafa-symbol-map-add-glyph"></a><h3>chafa_symbol_map_add_glyph??()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>
 chafa_symbol_map_add_glyph (<em class="parameter"><code><a class="link" 
href="chafa-ChafaSymbolMap.html#ChafaSymbolMap" title="ChafaSymbolMap"><span 
class="type">ChafaSymbolMap</span></a> *symbol_map</code></em>,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/docs/html/chafa-ChafaTermInfo.html 
new/chafa-1.12.1/docs/html/chafa-ChafaTermInfo.html
--- old/chafa-1.12.0/docs/html/chafa-ChafaTermInfo.html 2022-06-06 
03:06:41.000000000 +0200
+++ new/chafa-1.12.1/docs/html/chafa-ChafaTermInfo.html 2022-06-20 
00:28:07.000000000 +0200
@@ -347,6 +347,14 @@
 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span 
class="returnvalue">gchar</span></a>??*
 </td>
 <td class="function_name">
+<a class="link" 
href="chafa-ChafaTermInfo.html#chafa-term-info-emit-enable-bold" 
title="chafa_term_info_emit_enable_bold??()">chafa_term_info_emit_enable_bold</a>??<span
 class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span 
class="returnvalue">gchar</span></a>??*
+</td>
+<td class="function_name">
 <a class="link" 
href="chafa-ChafaTermInfo.html#chafa-term-info-emit-invert-colors" 
title="chafa_term_info_emit_invert_colors??()">chafa_term_info_emit_invert_colors</a>??<span
 class="c_punctuation">()</span>
 </td>
 </tr>
@@ -355,6 +363,30 @@
 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span 
class="returnvalue">gchar</span></a>??*
 </td>
 <td class="function_name">
+<a class="link" 
href="chafa-ChafaTermInfo.html#chafa-term-info-emit-set-color-bg-8" 
title="chafa_term_info_emit_set_color_bg_8??()">chafa_term_info_emit_set_color_bg_8</a>??<span
 class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span 
class="returnvalue">gchar</span></a>??*
+</td>
+<td class="function_name">
+<a class="link" 
href="chafa-ChafaTermInfo.html#chafa-term-info-emit-set-color-fg-8" 
title="chafa_term_info_emit_set_color_fg_8??()">chafa_term_info_emit_set_color_fg_8</a>??<span
 class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span 
class="returnvalue">gchar</span></a>??*
+</td>
+<td class="function_name">
+<a class="link" 
href="chafa-ChafaTermInfo.html#chafa-term-info-emit-set-color-fgbg-8" 
title="chafa_term_info_emit_set_color_fgbg_8??()">chafa_term_info_emit_set_color_fgbg_8</a>??<span
 class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span 
class="returnvalue">gchar</span></a>??*
+</td>
+<td class="function_name">
 <a class="link" 
href="chafa-ChafaTermInfo.html#chafa-term-info-emit-set-color-fg-16" 
title="chafa_term_info_emit_set_color_fg_16??()">chafa_term_info_emit_set_color_fg_16</a>??<span
 class="c_punctuation">()</span>
 </td>
 </tr>
@@ -2064,6 +2096,45 @@
 </div>
 <hr>
 <div class="refsect2">
+<a 
name="chafa-term-info-emit-enable-bold"></a><h3>chafa_term_info_emit_enable_bold??()</h3>
+<pre class="programlisting"><a 
href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span 
class="returnvalue">gchar</span></a>??*
+chafa_term_info_emit_enable_bold (<em class="parameter"><code>const <a 
class="link" href="chafa-ChafaTermInfo.html#ChafaTermInfo" 
title="ChafaTermInfo"><span class="type">ChafaTermInfo</span></a> 
*term_info</code></em>,
+                                  <em class="parameter"><code><a 
href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span 
class="type">gchar</span></a> *dest</code></em>);</pre>
+<p>Prints the control sequence for <a class="link" 
href="chafa-ChafaTermInfo.html#CHAFA-TERM-SEQ-ENABLE-BOLD:CAPS"><span 
class="type">CHAFA_TERM_SEQ_ENABLE_BOLD</span></a>.</p>
+<p><em class="parameter"><code>dest</code></em>
+ must have enough space to hold
+<a class="link" href="chafa-ChafaTermInfo.html#CHAFA-TERM-SEQ-LENGTH-MAX:CAPS" 
title="CHAFA_TERM_SEQ_LENGTH_MAX"><span 
class="type">CHAFA_TERM_SEQ_LENGTH_MAX</span></a> bytes, even if the emitted 
sequence is
+shorter. The output will not be zero-terminated.</p>
+<div class="refsect3">
+<a name="chafa-term-info-emit-enable-bold.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" 
border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>term_info</p></td>
+<td class="parameter_description"><p>A <a class="link" 
href="chafa-ChafaTermInfo.html#ChafaTermInfo" title="ChafaTermInfo"><span 
class="type">ChafaTermInfo</span></a></p></td>
+<td class="parameter_annotations">??</td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dest</p></td>
+<td class="parameter_description"><p>String destination</p></td>
+<td class="parameter_annotations">??</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="chafa-term-info-emit-enable-bold.returns"></a><h4>Returns</h4>
+<p> Pointer to first byte after emitted string</p>
+</div>
+<p class="since">Since: 1.12</p>
+</div>
+<hr>
+<div class="refsect2">
 <a 
name="chafa-term-info-emit-invert-colors"></a><h3>chafa_term_info_emit_invert_colors??()</h3>
 <pre class="programlisting"><a 
href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span 
class="returnvalue">gchar</span></a>??*
 chafa_term_info_emit_invert_colors (<em class="parameter"><code>const <a 
class="link" href="chafa-ChafaTermInfo.html#ChafaTermInfo" 
title="ChafaTermInfo"><span class="type">ChafaTermInfo</span></a> 
*term_info</code></em>,
@@ -2103,6 +2174,147 @@
 </div>
 <hr>
 <div class="refsect2">
+<a 
name="chafa-term-info-emit-set-color-bg-8"></a><h3>chafa_term_info_emit_set_color_bg_8??()</h3>
+<pre class="programlisting"><a 
href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span 
class="returnvalue">gchar</span></a>??*
+chafa_term_info_emit_set_color_bg_8 (<em class="parameter"><code>const <a 
class="link" href="chafa-ChafaTermInfo.html#ChafaTermInfo" 
title="ChafaTermInfo"><span class="type">ChafaTermInfo</span></a> 
*term_info</code></em>,
+                                     <em class="parameter"><code><a 
href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span 
class="type">gchar</span></a> *dest</code></em>,
+                                     <em class="parameter"><code><a 
href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint8"><span 
class="type">guint8</span></a> pen</code></em>);</pre>
+<p>Prints the control sequence for <a class="link" 
href="chafa-ChafaTermInfo.html#CHAFA-TERM-SEQ-SET-COLOR-BG-8:CAPS"><span 
class="type">CHAFA_TERM_SEQ_SET_COLOR_BG_8</span></a>.</p>
+<p><em class="parameter"><code>dest</code></em>
+ must have enough space to hold
+<a class="link" href="chafa-ChafaTermInfo.html#CHAFA-TERM-SEQ-LENGTH-MAX:CAPS" 
title="CHAFA_TERM_SEQ_LENGTH_MAX"><span 
class="type">CHAFA_TERM_SEQ_LENGTH_MAX</span></a> bytes, even if the emitted 
sequence is
+shorter. The output will not be zero-terminated.</p>
+<div class="refsect3">
+<a 
name="chafa-term-info-emit-set-color-bg-8.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" 
border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>term_info</p></td>
+<td class="parameter_description"><p>A <a class="link" 
href="chafa-ChafaTermInfo.html#ChafaTermInfo" title="ChafaTermInfo"><span 
class="type">ChafaTermInfo</span></a></p></td>
+<td class="parameter_annotations">??</td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dest</p></td>
+<td class="parameter_description"><p>String destination</p></td>
+<td class="parameter_annotations">??</td>
+</tr>
+<tr>
+<td class="parameter_name"><p>pen</p></td>
+<td class="parameter_description"><p>Pen number, 0-7</p></td>
+<td class="parameter_annotations">??</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="chafa-term-info-emit-set-color-bg-8.returns"></a><h4>Returns</h4>
+<p> Pointer to first byte after emitted string</p>
+</div>
+<p class="since">Since: 1.12</p>
+</div>
+<hr>
+<div class="refsect2">
+<a 
name="chafa-term-info-emit-set-color-fg-8"></a><h3>chafa_term_info_emit_set_color_fg_8??()</h3>
+<pre class="programlisting"><a 
href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span 
class="returnvalue">gchar</span></a>??*
+chafa_term_info_emit_set_color_fg_8 (<em class="parameter"><code>const <a 
class="link" href="chafa-ChafaTermInfo.html#ChafaTermInfo" 
title="ChafaTermInfo"><span class="type">ChafaTermInfo</span></a> 
*term_info</code></em>,
+                                     <em class="parameter"><code><a 
href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span 
class="type">gchar</span></a> *dest</code></em>,
+                                     <em class="parameter"><code><a 
href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint8"><span 
class="type">guint8</span></a> pen</code></em>);</pre>
+<p>Prints the control sequence for <a class="link" 
href="chafa-ChafaTermInfo.html#CHAFA-TERM-SEQ-SET-COLOR-FG-8:CAPS"><span 
class="type">CHAFA_TERM_SEQ_SET_COLOR_FG_8</span></a>.</p>
+<p><em class="parameter"><code>dest</code></em>
+ must have enough space to hold
+<a class="link" href="chafa-ChafaTermInfo.html#CHAFA-TERM-SEQ-LENGTH-MAX:CAPS" 
title="CHAFA_TERM_SEQ_LENGTH_MAX"><span 
class="type">CHAFA_TERM_SEQ_LENGTH_MAX</span></a> bytes, even if the emitted 
sequence is
+shorter. The output will not be zero-terminated.</p>
+<div class="refsect3">
+<a 
name="chafa-term-info-emit-set-color-fg-8.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" 
border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>term_info</p></td>
+<td class="parameter_description"><p>A <a class="link" 
href="chafa-ChafaTermInfo.html#ChafaTermInfo" title="ChafaTermInfo"><span 
class="type">ChafaTermInfo</span></a></p></td>
+<td class="parameter_annotations">??</td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dest</p></td>
+<td class="parameter_description"><p>String destination</p></td>
+<td class="parameter_annotations">??</td>
+</tr>
+<tr>
+<td class="parameter_name"><p>pen</p></td>
+<td class="parameter_description"><p>Pen number, 0-7</p></td>
+<td class="parameter_annotations">??</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="chafa-term-info-emit-set-color-fg-8.returns"></a><h4>Returns</h4>
+<p> Pointer to first byte after emitted string</p>
+</div>
+<p class="since">Since: 1.12</p>
+</div>
+<hr>
+<div class="refsect2">
+<a 
name="chafa-term-info-emit-set-color-fgbg-8"></a><h3>chafa_term_info_emit_set_color_fgbg_8??()</h3>
+<pre class="programlisting"><a 
href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span 
class="returnvalue">gchar</span></a>??*
+chafa_term_info_emit_set_color_fgbg_8 (<em class="parameter"><code>const <a 
class="link" href="chafa-ChafaTermInfo.html#ChafaTermInfo" 
title="ChafaTermInfo"><span class="type">ChafaTermInfo</span></a> 
*term_info</code></em>,
+                                       <em class="parameter"><code><a 
href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span 
class="type">gchar</span></a> *dest</code></em>,
+                                       <em class="parameter"><code><a 
href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint8"><span 
class="type">guint8</span></a> fg_pen</code></em>,
+                                       <em class="parameter"><code><a 
href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint8"><span 
class="type">guint8</span></a> bg_pen</code></em>);</pre>
+<p>Prints the control sequence for <a class="link" 
href="chafa-ChafaTermInfo.html#CHAFA-TERM-SEQ-SET-COLOR-FGBG-8:CAPS"><span 
class="type">CHAFA_TERM_SEQ_SET_COLOR_FGBG_8</span></a>.</p>
+<p><em class="parameter"><code>dest</code></em>
+ must have enough space to hold
+<a class="link" href="chafa-ChafaTermInfo.html#CHAFA-TERM-SEQ-LENGTH-MAX:CAPS" 
title="CHAFA_TERM_SEQ_LENGTH_MAX"><span 
class="type">CHAFA_TERM_SEQ_LENGTH_MAX</span></a> bytes, even if the emitted 
sequence is
+shorter. The output will not be zero-terminated.</p>
+<div class="refsect3">
+<a 
name="chafa-term-info-emit-set-color-fgbg-8.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" 
border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>term_info</p></td>
+<td class="parameter_description"><p>A <a class="link" 
href="chafa-ChafaTermInfo.html#ChafaTermInfo" title="ChafaTermInfo"><span 
class="type">ChafaTermInfo</span></a></p></td>
+<td class="parameter_annotations">??</td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dest</p></td>
+<td class="parameter_description"><p>String destination</p></td>
+<td class="parameter_annotations">??</td>
+</tr>
+<tr>
+<td class="parameter_name"><p>fg_pen</p></td>
+<td class="parameter_description"><p>Foreground pen number, 0-7</p></td>
+<td class="parameter_annotations">??</td>
+</tr>
+<tr>
+<td class="parameter_name"><p>bg_pen</p></td>
+<td class="parameter_description"><p>Background pen number, 0-7</p></td>
+<td class="parameter_annotations">??</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="chafa-term-info-emit-set-color-fgbg-8.returns"></a><h4>Returns</h4>
+<p> Pointer to first byte after emitted string</p>
+</div>
+<p class="since">Since: 1.12</p>
+</div>
+<hr>
+<div class="refsect2">
 <a 
name="chafa-term-info-emit-set-color-fg-16"></a><h3>chafa_term_info_emit_set_color_fg_16??()</h3>
 <pre class="programlisting"><a 
href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span 
class="returnvalue">gchar</span></a>??*
 chafa_term_info_emit_set_color_fg_16 (<em class="parameter"><code>const <a 
class="link" href="chafa-ChafaTermInfo.html#ChafaTermInfo" 
title="ChafaTermInfo"><span class="type">ChafaTermInfo</span></a> 
*term_info</code></em>,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/docs/html/chafa-Features.html 
new/chafa-1.12.1/docs/html/chafa-Features.html
--- old/chafa-1.12.0/docs/html/chafa-Features.html      2022-06-06 
03:06:41.000000000 +0200
+++ new/chafa-1.12.1/docs/html/chafa-Features.html      2022-06-20 
00:28:07.000000000 +0200
@@ -63,6 +63,30 @@
 <a class="link" href="chafa-Features.html#chafa-describe-features" 
title="chafa_describe_features??()">chafa_describe_features</a>??<span 
class="c_punctuation">()</span>
 </td>
 </tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span 
class="returnvalue">gint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="chafa-Features.html#chafa-get-n-threads" 
title="chafa_get_n_threads??()">chafa_get_n_threads</a>??<span 
class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="chafa-Features.html#chafa-set-n-threads" 
title="chafa_set_n_threads??()">chafa_set_n_threads</a>??<span 
class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span 
class="returnvalue">gint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="chafa-Features.html#chafa-get-n-actual-threads" 
title="chafa_get_n_actual_threads??()">chafa_get_n_actual_threads</a>??<span 
class="c_punctuation">()</span>
+</td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -138,6 +162,54 @@
 <p> A string describing the features. This must be freed by caller.</p>
 </div>
 </div>
+<hr>
+<div class="refsect2">
+<a name="chafa-get-n-threads"></a><h3>chafa_get_n_threads??()</h3>
+<pre class="programlisting"><a 
href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span 
class="returnvalue">gint</span></a>
+chafa_get_n_threads (<em class="parameter"><code><span 
class="type">void</span></code></em>);</pre>
+<p>Queries the maximum number of worker threads to use for parallel 
processing.</p>
+<div class="refsect3">
+<a name="chafa-get-n-threads.returns"></a><h4>Returns</h4>
+<p> The number of threads, or -1 if determined automatically</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="chafa-set-n-threads"></a><h3>chafa_set_n_threads??()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+chafa_set_n_threads (<em class="parameter"><code><a 
href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span 
class="type">gint</span></a> n</code></em>);</pre>
+<p>Sets the maximum number of worker threads to use for parallel processing,
+or -1 to determine this automatically. The default is -1.</p>
+<p>Setting this to 0 or 1 will avoid using thread pools and instead perform
+all processing in the main thread.</p>
+<div class="refsect3">
+<a name="chafa-set-n-threads.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" 
border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>n</p></td>
+<td class="parameter_description"><p>Number of threads</p></td>
+<td class="parameter_annotations">??</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a 
name="chafa-get-n-actual-threads"></a><h3>chafa_get_n_actual_threads??()</h3>
+<pre class="programlisting"><a 
href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint"><span 
class="returnvalue">gint</span></a>
+chafa_get_n_actual_threads (<em class="parameter"><code><span 
class="type">void</span></code></em>);</pre>
+<p>Queries the number of worker threads that will actually be used for
+parallel processing.</p>
+<div class="refsect3">
+<a name="chafa-get-n-actual-threads.returns"></a><h4>Returns</h4>
+<p> Number of threads, always &gt;= 1</p>
+</div>
+</div>
 </div>
 <div class="refsect1">
 <a name="chafa-Features.other_details"></a><h2>Types and Values</h2>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/docs/html/chafa-Miscellaneous.html 
new/chafa-1.12.1/docs/html/chafa-Miscellaneous.html
--- old/chafa-1.12.0/docs/html/chafa-Miscellaneous.html 2022-06-06 
03:06:41.000000000 +0200
+++ new/chafa-1.12.1/docs/html/chafa-Miscellaneous.html 2022-06-20 
00:28:07.000000000 +0200
@@ -85,6 +85,14 @@
 <td class="function_name"><a class="link" 
href="chafa-Miscellaneous.html#CHAFA-VERSION-1-8:CAPS" 
title="CHAFA_VERSION_1_8">CHAFA_VERSION_1_8</a></td>
 </tr>
 <tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" 
href="chafa-Miscellaneous.html#CHAFA-VERSION-1-10:CAPS" 
title="CHAFA_VERSION_1_10">CHAFA_VERSION_1_10</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" 
href="chafa-Miscellaneous.html#CHAFA-VERSION-1-12:CAPS" 
title="CHAFA_VERSION_1_12">CHAFA_VERSION_1_12</a></td>
+</tr>
+<tr>
 <td class="datatype_keyword">enum</td>
 <td class="function_name"><a class="link" 
href="chafa-Miscellaneous.html#ChafaPixelType" title="enum 
ChafaPixelType">ChafaPixelType</a></td>
 </tr>
@@ -240,6 +248,18 @@
 </pre>
 </div>
 <hr>
+<div class="refsect2">
+<a name="CHAFA-VERSION-1-10:CAPS"></a><h3>CHAFA_VERSION_1_10</h3>
+<pre class="programlisting">#define CHAFA_VERSION_1_10 (G_ENCODE_VERSION (1, 
10))
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="CHAFA-VERSION-1-12:CAPS"></a><h3>CHAFA_VERSION_1_12</h3>
+<pre class="programlisting">#define CHAFA_VERSION_1_12 (G_ENCODE_VERSION (1, 
12))
+</pre>
+</div>
+<hr>
 <div class="refsect2">
 <a name="ChafaPixelType"></a><h3>enum ChafaPixelType</h3>
 <p>Pixel formats supported by <a class="link" 
href="chafa-ChafaCanvas.html#ChafaCanvas" title="ChafaCanvas"><span 
class="type">ChafaCanvas</span></a> and <a class="link" 
href="chafa-ChafaSymbolMap.html#ChafaSymbolMap" title="ChafaSymbolMap"><span 
class="type">ChafaSymbolMap</span></a>.</p>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/docs/html/chafa.devhelp2 
new/chafa-1.12.1/docs/html/chafa.devhelp2
--- old/chafa-1.12.0/docs/html/chafa.devhelp2   2022-06-06 03:06:41.000000000 
+0200
+++ new/chafa-1.12.1/docs/html/chafa.devhelp2   2022-06-20 00:28:07.000000000 
+0200
@@ -91,6 +91,7 @@
     <keyword type="function" name="chafa_symbol_map_apply_selectors??()" 
link="chafa-ChafaSymbolMap.html#chafa-symbol-map-apply-selectors"/>
     <keyword type="function" 
name="chafa_symbol_map_get_allow_builtin_glyphs??()" 
link="chafa-ChafaSymbolMap.html#chafa-symbol-map-get-allow-builtin-glyphs" 
since="1.4"/>
     <keyword type="function" 
name="chafa_symbol_map_set_allow_builtin_glyphs??()" 
link="chafa-ChafaSymbolMap.html#chafa-symbol-map-set-allow-builtin-glyphs" 
since="1.4"/>
+    <keyword type="function" name="chafa_symbol_map_get_glyph??()" 
link="chafa-ChafaSymbolMap.html#chafa-symbol-map-get-glyph" since="1.12"/>
     <keyword type="function" name="chafa_symbol_map_add_glyph??()" 
link="chafa-ChafaSymbolMap.html#chafa-symbol-map-add-glyph" since="1.4"/>
     <keyword type="macro" name="CHAFA_SYMBOL_WIDTH_PIXELS" 
link="chafa-ChafaSymbolMap.html#CHAFA-SYMBOL-WIDTH-PIXELS:CAPS"/>
     <keyword type="macro" name="CHAFA_SYMBOL_HEIGHT_PIXELS" 
link="chafa-ChafaSymbolMap.html#CHAFA-SYMBOL-HEIGHT-PIXELS:CAPS"/>
@@ -142,7 +143,11 @@
     <keyword type="function" name="chafa_term_info_emit_disable_insert??()" 
link="chafa-ChafaTermInfo.html#chafa-term-info-emit-disable-insert" 
since="1.6"/>
     <keyword type="function" name="chafa_term_info_emit_enable_wrap??()" 
link="chafa-ChafaTermInfo.html#chafa-term-info-emit-enable-wrap" since="1.6"/>
     <keyword type="function" name="chafa_term_info_emit_disable_wrap??()" 
link="chafa-ChafaTermInfo.html#chafa-term-info-emit-disable-wrap" since="1.6"/>
+    <keyword type="function" name="chafa_term_info_emit_enable_bold??()" 
link="chafa-ChafaTermInfo.html#chafa-term-info-emit-enable-bold" since="1.12"/>
     <keyword type="function" name="chafa_term_info_emit_invert_colors??()" 
link="chafa-ChafaTermInfo.html#chafa-term-info-emit-invert-colors" since="1.6"/>
+    <keyword type="function" name="chafa_term_info_emit_set_color_bg_8??()" 
link="chafa-ChafaTermInfo.html#chafa-term-info-emit-set-color-bg-8" 
since="1.12"/>
+    <keyword type="function" name="chafa_term_info_emit_set_color_fg_8??()" 
link="chafa-ChafaTermInfo.html#chafa-term-info-emit-set-color-fg-8" 
since="1.12"/>
+    <keyword type="function" name="chafa_term_info_emit_set_color_fgbg_8??()" 
link="chafa-ChafaTermInfo.html#chafa-term-info-emit-set-color-fgbg-8" 
since="1.12"/>
     <keyword type="function" name="chafa_term_info_emit_set_color_fg_16??()" 
link="chafa-ChafaTermInfo.html#chafa-term-info-emit-set-color-fg-16" 
since="1.6"/>
     <keyword type="function" name="chafa_term_info_emit_set_color_bg_16??()" 
link="chafa-ChafaTermInfo.html#chafa-term-info-emit-set-color-bg-16" 
since="1.6"/>
     <keyword type="function" name="chafa_term_info_emit_set_color_fgbg_16??()" 
link="chafa-ChafaTermInfo.html#chafa-term-info-emit-set-color-fgbg-16" 
since="1.6"/>
@@ -171,6 +176,9 @@
     <keyword type="function" name="chafa_get_builtin_features??()" 
link="chafa-Features.html#chafa-get-builtin-features"/>
     <keyword type="function" name="chafa_get_supported_features??()" 
link="chafa-Features.html#chafa-get-supported-features"/>
     <keyword type="function" name="chafa_describe_features??()" 
link="chafa-Features.html#chafa-describe-features"/>
+    <keyword type="function" name="chafa_get_n_threads??()" 
link="chafa-Features.html#chafa-get-n-threads"/>
+    <keyword type="function" name="chafa_set_n_threads??()" 
link="chafa-Features.html#chafa-set-n-threads"/>
+    <keyword type="function" name="chafa_get_n_actual_threads??()" 
link="chafa-Features.html#chafa-get-n-actual-threads"/>
     <keyword type="enum" name="enum ChafaFeatures" 
link="chafa-Features.html#ChafaFeatures"/>
     <keyword type="function" name="chafa_calc_canvas_geometry??()" 
link="chafa-Miscellaneous.html#chafa-calc-canvas-geometry"/>
     <keyword type="macro" name="CHAFA_VERSION_MIN_REQUIRED" 
link="chafa-Miscellaneous.html#CHAFA-VERSION-MIN-REQUIRED:CAPS" since="1.2"/>
@@ -180,6 +188,8 @@
     <keyword type="macro" name="CHAFA_VERSION_1_4" 
link="chafa-Miscellaneous.html#CHAFA-VERSION-1-4:CAPS"/>
     <keyword type="macro" name="CHAFA_VERSION_1_6" 
link="chafa-Miscellaneous.html#CHAFA-VERSION-1-6:CAPS"/>
     <keyword type="macro" name="CHAFA_VERSION_1_8" 
link="chafa-Miscellaneous.html#CHAFA-VERSION-1-8:CAPS"/>
+    <keyword type="macro" name="CHAFA_VERSION_1_10" 
link="chafa-Miscellaneous.html#CHAFA-VERSION-1-10:CAPS"/>
+    <keyword type="macro" name="CHAFA_VERSION_1_12" 
link="chafa-Miscellaneous.html#CHAFA-VERSION-1-12:CAPS"/>
     <keyword type="enum" name="enum ChafaPixelType" 
link="chafa-Miscellaneous.html#ChafaPixelType" since="1.4"/>
     <keyword type="constant" name="CHAFA_PIXEL_MODE_SYMBOLS" 
link="chafa-ChafaCanvasConfig.html#CHAFA-PIXEL-MODE-SYMBOLS:CAPS"/>
     <keyword type="constant" name="CHAFA_PIXEL_MODE_SIXELS" 
link="chafa-ChafaCanvasConfig.html#CHAFA-PIXEL-MODE-SIXELS:CAPS"/>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/docs/html/index.html 
new/chafa-1.12.1/docs/html/index.html
--- old/chafa-1.12.0/docs/html/index.html       2022-06-06 03:06:41.000000000 
+0200
+++ new/chafa-1.12.1/docs/html/index.html       2022-06-20 00:28:07.000000000 
+0200
@@ -15,7 +15,7 @@
 <div>
 <div><table class="navigation" id="top" width="100%" cellpadding="2" 
cellspacing="0"><tr><th valign="middle"><p class="title">Chafa Reference 
Manual</p></th></tr></table></div>
 <div><p class="releaseinfo">
-      For Chafa version 1.12.0
+      For Chafa version 1.12.1
 .
       The latest version of this documentation can be found online at
       <a class="ulink" href="https://hpjansson.org/chafa/ref/index.html"; 
target="_top">https://hpjansson.org/chafa/ref/</a>.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/libnsgif/libnsgif.c 
new/chafa-1.12.1/libnsgif/libnsgif.c
--- old/chafa-1.12.0/libnsgif/libnsgif.c        2022-05-31 01:01:58.000000000 
+0200
+++ new/chafa-1.12.1/libnsgif/libnsgif.c        2022-06-15 00:13:28.000000000 
+0200
@@ -299,6 +299,9 @@
                 }
                 gif->frames = temp_buf;
                 gif->frame_holders = frame + 1;
+
+                /* Clear all frame fields */
+                memset(&gif->frames[frame], 0, sizeof(gif_frame));
         }
 
         /* Store our frame pointer. We would do it when allocating except we
@@ -1068,6 +1071,9 @@
                 }
                 gif->frame_holders = 1;
 
+                /* Clear all frame fields */
+                memset(gif->frames, 0, sizeof(gif_frame));
+
                 /* Initialise the bitmap header */
                 assert(gif->bitmap_callbacks.bitmap_create);
                 gif->frame_image = 
gif->bitmap_callbacks.bitmap_create(gif->width, gif->height);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/libnsgif/lzw.c 
new/chafa-1.12.1/libnsgif/lzw.c
--- old/chafa-1.12.0/libnsgif/lzw.c     2022-05-31 01:01:58.000000000 +0200
+++ new/chafa-1.12.1/libnsgif/lzw.c     2022-06-15 00:13:28.000000000 +0200
@@ -329,6 +329,10 @@
                /* Code is invalid */
                return LZW_BAD_CODE;
 
+       } else if (code_new >= 1 << LZW_CODE_MAX) {
+               /* Don't access out of bound */
+               return LZW_BAD_CODE;
+
        } else if (code_new < current_entry) {
                /* Code is in table */
                code_out = code_new;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/lodepng/lodepng.c 
new/chafa-1.12.1/lodepng/lodepng.c
--- old/chafa-1.12.0/lodepng/lodepng.c  2022-05-31 01:01:58.000000000 +0200
+++ new/chafa-1.12.1/lodepng/lodepng.c  2022-06-20 00:24:42.000000000 +0200
@@ -1367,8 +1367,11 @@
   /*read the literal data: LEN bytes are now stored in the out buffer*/
   if(bytepos + LEN > size) return 23; /*error: reading outside of in buffer*/
 
-  lodepng_memcpy(out->data + out->size - LEN, reader->data + bytepos, LEN);
-  bytepos += LEN;
+  /*out->data can be NULL (when LEN is zero), and arithmetics on NULL ptr is 
undefined. so we check*/
+  if (out->data) {
+    lodepng_memcpy(out->data + out->size - LEN, reader->data + bytepos, LEN);
+    bytepos += LEN;
+  }
 
   reader->bp = bytepos << 3u;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/tests/Makefile.am 
new/chafa-1.12.1/tests/Makefile.am
--- old/chafa-1.12.0/tests/Makefile.am  2022-06-05 20:48:29.000000000 +0200
+++ new/chafa-1.12.1/tests/Makefile.am  2022-06-15 00:13:28.000000000 +0200
@@ -14,6 +14,7 @@
 ## --- Frontend tests ---
 
 TOOL_CHECKS = \
+       chafa-tool-bad-test.sh \
        chafa-tool-cmode-test.sh \
        chafa-tool-format-test.sh \
        chafa-tool-loader-test.sh \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/tests/Makefile.in 
new/chafa-1.12.1/tests/Makefile.in
--- old/chafa-1.12.0/tests/Makefile.in  2022-06-06 02:42:44.000000000 +0200
+++ new/chafa-1.12.1/tests/Makefile.in  2022-06-20 00:27:51.000000000 +0200
@@ -584,6 +584,7 @@
        term-info-test.c
 
 TOOL_CHECKS = \
+       chafa-tool-bad-test.sh \
        chafa-tool-cmode-test.sh \
        chafa-tool-format-test.sh \
        chafa-tool-loader-test.sh \
@@ -937,6 +938,13 @@
        $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
        --log-file $$b.log --trs-file $$b.trs \
        $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) 
-- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+chafa-tool-bad-test.sh.log: chafa-tool-bad-test.sh
+       @p='chafa-tool-bad-test.sh'; \
+       b='chafa-tool-bad-test.sh'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) 
-- $(LOG_COMPILE) \
        "$$tst" $(AM_TESTS_FD_REDIRECT)
 chafa-tool-cmode-test.sh.log: chafa-tool-cmode-test.sh
        @p='chafa-tool-cmode-test.sh'; \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/tests/chafa-tool-bad-test.sh 
new/chafa-1.12.1/tests/chafa-tool-bad-test.sh
--- old/chafa-1.12.0/tests/chafa-tool-bad-test.sh       1970-01-01 
01:00:00.000000000 +0100
+++ new/chafa-1.12.1/tests/chafa-tool-bad-test.sh       2022-06-15 
00:13:28.000000000 +0200
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+[ "x${srcdir}" = "x" ] && srcdir="."
+. "${srcdir}/chafa-tool-test-common.sh"
+
+for format in $formats; do
+    for size in $sizes; do
+        run_cmd_all_bad_files "$tool -f $format -c 16 --dither fs -s $size 
--threads 12 -d 0 --speed max" || exit $?
+    done
+done
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/tests/chafa-tool-cmode-test.sh 
new/chafa-1.12.1/tests/chafa-tool-cmode-test.sh
--- old/chafa-1.12.0/tests/chafa-tool-cmode-test.sh     2022-05-30 
23:03:57.000000000 +0200
+++ new/chafa-1.12.1/tests/chafa-tool-cmode-test.sh     2022-06-15 
00:13:28.000000000 +0200
@@ -6,7 +6,7 @@
 for cmode in $cmodes; do
     for size in $sizes; do
         for n_threads in $thread_counts; do
-            run_cmd "$tool -f symbol -c $cmode -s $size --threads $n_threads 
--animate no"
+            run_cmd "$tool -f symbol -c $cmode -s $size --threads $n_threads 
--animate no" || exit $?
         done
     done
 done
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/tests/chafa-tool-format-test.sh 
new/chafa-1.12.1/tests/chafa-tool-format-test.sh
--- old/chafa-1.12.0/tests/chafa-tool-format-test.sh    2022-05-30 
23:05:18.000000000 +0200
+++ new/chafa-1.12.1/tests/chafa-tool-format-test.sh    2022-06-15 
00:13:28.000000000 +0200
@@ -6,7 +6,7 @@
 for format in $formats; do
     for size in $sizes; do
         for n_threads in $thread_counts; do
-            run_cmd "$tool -f $format -c full -s $size --threads $n_threads 
--animate no"
+            run_cmd_all_safe_files "$tool -f $format -c full -s $size 
--threads $n_threads -d 0 --speed max" || exit $?
         done
     done
 done
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/tests/chafa-tool-loader-test.sh 
new/chafa-1.12.1/tests/chafa-tool-loader-test.sh
--- old/chafa-1.12.0/tests/chafa-tool-loader-test.sh    2022-06-05 
21:24:31.000000000 +0200
+++ new/chafa-1.12.1/tests/chafa-tool-loader-test.sh    2022-06-15 
00:13:28.000000000 +0200
@@ -7,5 +7,5 @@
 
 for ext in $extensions; do
     [ "x${ext}" = "ximagemagick" ] && continue
-    run_cmd_single_file "$tool -f sixel --threads 12 --animate no" 
"good/pixel.$ext"
+    run_cmd_single_file "$tool -f sixel --threads 12 --animate no" 
"good/pixel.$ext" || exit $?
 done
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/tests/chafa-tool-options-test.sh 
new/chafa-1.12.1/tests/chafa-tool-options-test.sh
--- old/chafa-1.12.0/tests/chafa-tool-options-test.sh   2022-06-02 
23:26:02.000000000 +0200
+++ new/chafa-1.12.1/tests/chafa-tool-options-test.sh   2022-06-15 
00:13:28.000000000 +0200
@@ -15,7 +15,7 @@
                 for main_symbols in $symbol_selectors; do
                     for fill_symbols in $symbol_selectors; do
                         run_cmd "$tool -f $format -c 240 -s 53 --threads 12 
--animate no --color-space $color_space \
---color-extractor $color_extractor --dither $dither_type --symbols 
$main_symbols --fill $fill_symbols"
+--color-extractor $color_extractor --dither $dither_type --symbols 
$main_symbols --fill $fill_symbols" || exit $?
                     done
                 done
             done
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/tests/chafa-tool-pipe-test.sh 
new/chafa-1.12.1/tests/chafa-tool-pipe-test.sh
--- old/chafa-1.12.0/tests/chafa-tool-pipe-test.sh      2022-06-02 
23:13:08.000000000 +0200
+++ new/chafa-1.12.1/tests/chafa-tool-pipe-test.sh      2022-06-15 
00:13:28.000000000 +0200
@@ -3,4 +3,4 @@
 [ "x${srcdir}" = "x" ] && srcdir="."
 . "${srcdir}/chafa-tool-test-common.sh"
 
-run_cmd "$tool -f symbol -c full -s 63 --threads 12 --animate no < "
+run_cmd "$tool -f symbol -c full -s 63 --threads 12 --animate no < " || exit $?
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/tests/chafa-tool-test-common.sh 
new/chafa-1.12.1/tests/chafa-tool-test-common.sh
--- old/chafa-1.12.0/tests/chafa-tool-test-common.sh    2022-06-05 
21:23:20.000000000 +0200
+++ new/chafa-1.12.1/tests/chafa-tool-test-common.sh    2022-06-15 
00:13:28.000000000 +0200
@@ -1,18 +1,38 @@
 #!/bin/sh
 
-set -e
-
 run_cmd () {
     cmd="$1 ${top_srcdir}/tests/data/good/card-32c-noalpha.png >/dev/null"
     echo "$cmd" >&2
-    sh -c "$cmd"
+    sh -c "$cmd" || exit $?
 }
 
 run_cmd_single_file () {
     file="$2"
     cmd="$1 ${top_srcdir}/tests/data/$file >/dev/null"
     echo "$cmd" >&2
+    sh -c "$cmd" || exit $?
+}
+
+run_cmd_all_safe_files () {
+    # Only run on files for which we're guaranteed to have loaders.
+    # '$dir/*.{gif,png,xwd}' is a Bash-ism, so we can't use it.
+    dir="${top_srcdir}/tests/data/good"
+    cmd="$1 $dir/*.gif $dir/*.png $dir/*.xwd >/dev/null"
+    echo "$cmd" >&2
+    sh -c "$cmd" || exit $?
+}
+
+run_cmd_all_bad_files () {
+    # Since this only fails on crashes, it's fine to run it on absolutely
+    # everything (including unsupported formats, build files etc).
+    cmd="$1 ${top_srcdir}/tests/data/bad/* >/dev/null"
+    echo "$cmd" >&2
     sh -c "$cmd"
+    result=$?
+
+    # For corrupt files, an exit value of 1 or 2 is a fine result,
+    # but other values are trouble (e.g. terminated by signal).
+    if test $result -gt 2; then exit $result; fi
 }
 
 get_supported_loaders () {
@@ -34,8 +54,11 @@
     sizes="$(seq 1 100)"
     thread_counts="$(seq 1 32) 61"
 else
+    # The 13x13 size is specifically required to trigger the normalization
+    # overflow (see commit 60d7718f9d8fa591d3d69079fe583913c58c19d9).
+
     formats="symbol sixel kitty iterm"
     cmodes="none 2 16/8 16 256 full"
-    sizes="1 3 17 133"
+    sizes="1 3 13x13 133"
     thread_counts="1 2 3 12 32 61"
 fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/tests/data/bad/Makefile.am 
new/chafa-1.12.1/tests/data/bad/Makefile.am
--- old/chafa-1.12.0/tests/data/bad/Makefile.am 2022-06-04 03:03:36.000000000 
+0200
+++ new/chafa-1.12.1/tests/data/bad/Makefile.am 2022-06-20 00:24:42.000000000 
+0200
@@ -1 +1,8 @@
-EXTRA_DIST =
+EXTRA_DIST = \
+       libnsgif-lzw-oob.gif \
+       libnsgif-uninitialized-frame-fields.gif \
+       lodepng-zero-length-literal.png \
+       no-frame-data.gif \
+       pixops-normalize-signed-overflow.gif \
+       smolscale-unaligned-1.xwd \
+       smolscale-unaligned-2.xwd
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/tests/data/bad/Makefile.in 
new/chafa-1.12.1/tests/data/bad/Makefile.in
--- old/chafa-1.12.0/tests/data/bad/Makefile.in 2022-06-06 02:42:44.000000000 
+0200
+++ new/chafa-1.12.1/tests/data/bad/Makefile.in 2022-06-20 00:27:51.000000000 
+0200
@@ -275,7 +275,15 @@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-EXTRA_DIST = 
+EXTRA_DIST = \
+       libnsgif-lzw-oob.gif \
+       libnsgif-uninitialized-frame-fields.gif \
+       lodepng-zero-length-literal.png \
+       no-frame-data.gif \
+       pixops-normalize-signed-overflow.gif \
+       smolscale-unaligned-1.xwd \
+       smolscale-unaligned-2.xwd
+
 all: all-am
 
 .SUFFIXES:
Binary files old/chafa-1.12.0/tests/data/bad/libnsgif-lzw-oob.gif and 
new/chafa-1.12.1/tests/data/bad/libnsgif-lzw-oob.gif differ
Binary files 
old/chafa-1.12.0/tests/data/bad/libnsgif-uninitialized-frame-fields.gif and 
new/chafa-1.12.1/tests/data/bad/libnsgif-uninitialized-frame-fields.gif differ
Binary files old/chafa-1.12.0/tests/data/bad/lodepng-zero-length-literal.png 
and new/chafa-1.12.1/tests/data/bad/lodepng-zero-length-literal.png differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/tests/data/bad/no-frame-data.gif 
new/chafa-1.12.1/tests/data/bad/no-frame-data.gif
--- old/chafa-1.12.0/tests/data/bad/no-frame-data.gif   1970-01-01 
01:00:00.000000000 +0100
+++ new/chafa-1.12.1/tests/data/bad/no-frame-data.gif   2022-06-15 
00:13:28.000000000 +0200
@@ -0,0 +1 @@
+GIF89a???????;
\ No newline at end of file
Binary files 
old/chafa-1.12.0/tests/data/bad/pixops-normalize-signed-overflow.gif and 
new/chafa-1.12.1/tests/data/bad/pixops-normalize-signed-overflow.gif differ
Binary files old/chafa-1.12.0/tests/data/bad/smolscale-unaligned-1.xwd and 
new/chafa-1.12.1/tests/data/bad/smolscale-unaligned-1.xwd differ
Binary files old/chafa-1.12.0/tests/data/bad/smolscale-unaligned-2.xwd and 
new/chafa-1.12.1/tests/data/bad/smolscale-unaligned-2.xwd differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/tests/data/good/Makefile.am 
new/chafa-1.12.1/tests/data/good/Makefile.am
--- old/chafa-1.12.0/tests/data/good/Makefile.am        2022-06-06 
02:16:28.000000000 +0200
+++ new/chafa-1.12.1/tests/data/good/Makefile.am        2022-06-15 
00:13:28.000000000 +0200
@@ -1,8 +1,13 @@
 EXTRA_DIST = \
+       anim-local-cmaps.gif \
+       anim.gif \
        card-32c-alpha.png \
        card-32c-noalpha.png \
        card-full-alpha.png \
        card-full-noalpha.png \
+       noise-32x32-indexed.png \
+       noise-32x32.gif \
+       noise-32x32.png \
        pixel.gif \
        pixel.jpeg \
        pixel.png \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/tests/data/good/Makefile.in 
new/chafa-1.12.1/tests/data/good/Makefile.in
--- old/chafa-1.12.0/tests/data/good/Makefile.in        2022-06-06 
02:42:44.000000000 +0200
+++ new/chafa-1.12.1/tests/data/good/Makefile.in        2022-06-20 
00:27:51.000000000 +0200
@@ -276,10 +276,15 @@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 EXTRA_DIST = \
+       anim-local-cmaps.gif \
+       anim.gif \
        card-32c-alpha.png \
        card-32c-noalpha.png \
        card-full-alpha.png \
        card-full-noalpha.png \
+       noise-32x32-indexed.png \
+       noise-32x32.gif \
+       noise-32x32.png \
        pixel.gif \
        pixel.jpeg \
        pixel.png \
Binary files old/chafa-1.12.0/tests/data/good/anim-local-cmaps.gif and 
new/chafa-1.12.1/tests/data/good/anim-local-cmaps.gif differ
Binary files old/chafa-1.12.0/tests/data/good/anim.gif and 
new/chafa-1.12.1/tests/data/good/anim.gif differ
Binary files old/chafa-1.12.0/tests/data/good/noise-32x32-indexed.png and 
new/chafa-1.12.1/tests/data/good/noise-32x32-indexed.png differ
Binary files old/chafa-1.12.0/tests/data/good/noise-32x32.gif and 
new/chafa-1.12.1/tests/data/good/noise-32x32.gif differ
Binary files old/chafa-1.12.0/tests/data/good/noise-32x32.png and 
new/chafa-1.12.1/tests/data/good/noise-32x32.png differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/chafa-1.12.0/tools/chafa/xwd-loader.c 
new/chafa-1.12.1/tools/chafa/xwd-loader.c
--- old/chafa-1.12.0/tools/chafa/xwd-loader.c   2022-05-31 01:01:59.000000000 
+0200
+++ new/chafa-1.12.1/tools/chafa/xwd-loader.c   2022-06-15 00:13:28.000000000 
+0200
@@ -213,6 +213,7 @@
 
     ASSERT_HEADER (h->header_size >= sizeof (XwdHeader));
     ASSERT_HEADER (h->header_size <= 65535);
+    ASSERT_HEADER (h->header_size % 4 == 0);  /* For image data alignment */
     ASSERT_HEADER (h->file_version == 7);
     ASSERT_HEADER (h->pixmap_depth == 24);
 
@@ -235,6 +236,9 @@
     ASSERT_HEADER (h->bytes_per_line >= h->pixmap_width * (h->bits_per_pixel / 
8));
     ASSERT_HEADER (h->bytes_per_line <= h->pixmap_width * (h->bits_per_pixel / 
8) + 1024);
 
+    /* If each pixel is four bytes, reject unaligned rowstrides */
+    ASSERT_HEADER (h->bits_per_pixel != 32 || h->bytes_per_line % 4 == 0);
+
     /* Make sure the total allocation/map is not too big. */
     ASSERT_HEADER (h->bytes_per_line * h->pixmap_height < (1UL << 31) - 65536 
- 256 * 32);
 

Reply via email to