Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package libostree for openSUSE:Factory 
checked in at 2026-07-29 18:58:14
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libostree (Old)
 and      /work/SRC/openSUSE:Factory/.libostree.new.2004 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libostree"

Wed Jul 29 18:58:14 2026 rev:54 rq:1367816 version:2026.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/libostree/libostree.changes      2026-04-15 
16:04:03.533736696 +0200
+++ /work/SRC/openSUSE:Factory/.libostree.new.2004/libostree.changes    
2026-07-29 18:58:22.951851700 +0200
@@ -1,0 +2,12 @@
+Sun Jul 26 07:22:40 UTC 2026 - Andreas Stieger <[email protected]>
+
+- Update to 2026.2:
+  * Fix GVariant memory leak during opaque whiteout scanning that
+    could cause bootc install to-disk to fail with EBUSY on unmount
+  * Fix a crash for invalid UTF-8 ref names during pull operations
+  * Fix Kernel argument handling was fixed to properly handle quoted
+    values in /proc/cmdline
+  * Correct staged deployment bootconfig merging to preserve
+    options across re-staging
+ 
+-------------------------------------------------------------------

Old:
----
  libostree-2026.1.tar.xz

New:
----
  libostree-2026.2.tar.xz

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

Other differences:
------------------
++++++ libostree.spec ++++++
--- /var/tmp/diff_new_pack.aBF8hL/_old  2026-07-29 18:58:23.451868946 +0200
+++ /var/tmp/diff_new_pack.aBF8hL/_new  2026-07-29 18:58:23.455869084 +0200
@@ -24,7 +24,7 @@
 %bcond_without     ed25519
 %bcond_with        tests
 Name:           libostree
-Version:        2026.1
+Version:        2026.2
 Release:        0
 Summary:        Git for operating system binaries
 License:        LGPL-2.0-or-later

++++++ _scmsync.obsinfo ++++++
--- /var/tmp/diff_new_pack.aBF8hL/_old  2026-07-29 18:58:23.503870740 +0200
+++ /var/tmp/diff_new_pack.aBF8hL/_new  2026-07-29 18:58:23.507870878 +0200
@@ -1,6 +1,6 @@
-mtime: 1775904797
-commit: bfd49d4da3003e8b2231dbd7d90b3e5efce6a996fe32206d5a889658d2eec589
+mtime: 1785050693
+commit: c98e1eb110fba91bebb4cc4b08bcdc62f1a0725e98776484676933f1082db37b
 url: https://src.opensuse.org/GNOME/libostree
-revision: bfd49d4da3003e8b2231dbd7d90b3e5efce6a996fe32206d5a889658d2eec589
+revision: c98e1eb110fba91bebb4cc4b08bcdc62f1a0725e98776484676933f1082db37b
 projectscmsync: https://src.opensuse.org/GNOME/_ObsPrj
 

++++++ build.specials.obscpio ++++++

++++++ build.specials.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore      1970-01-01 01:00:00.000000000 +0100
+++ new/.gitignore      2026-07-26 09:24:53.000000000 +0200
@@ -0,0 +1,4 @@
+*.obscpio
+*.osc
+_build.*
+.pbuild

++++++ libostree-2026.1.tar.xz -> libostree-2026.2.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.1/Makefile-tests.am 
new/libostree-2026.2/Makefile-tests.am
--- old/libostree-2026.1/Makefile-tests.am      2026-04-07 02:00:06.000000000 
+0200
+++ new/libostree-2026.2/Makefile-tests.am      2026-06-29 21:06:12.000000000 
+0200
@@ -292,7 +292,7 @@
        tests/test-keyfile-utils tests/test-ot-opt-utils 
tests/test-ot-tool-util \
        tests/test-checksum tests/test-lzma tests/test-rollsum 
tests/test-bootconfig-parser-internals \
        tests/test-basic-c tests/test-sysroot-c tests/test-pull-c 
tests/test-repo tests/test-include-ostree-h tests/test-kargs \
-       tests/test-rfc2616-dates tests/test-pem
+       tests/test-rfc2616-dates tests/test-pem tests/test-validate-utf8
 
 if USE_GPGME
 _installed_or_uninstalled_test_programs += \
@@ -435,6 +435,13 @@
 tests_test_pem_CFLAGS = $(TESTS_CFLAGS)
 tests_test_pem_LDADD = $(TESTS_LDADD)
 
+tests_test_validate_utf8_SOURCES = \
+       src/libostree/ostree-core.c \
+       src/libostree/ostree-varint.c \
+       tests/test-validate-utf8.c
+tests_test_validate_utf8_CFLAGS = $(TESTS_CFLAGS) $(libglnx_cflags)
+tests_test_validate_utf8_LDADD = $(TESTS_LDADD)
+
 noinst_PROGRAMS += tests/test-commit-sign-sh-ext
 tests_test_commit_sign_sh_ext_CFLAGS = $(TESTS_CFLAGS)
 tests_test_commit_sign_sh_ext_LDADD = $(TESTS_LDADD)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.1/Makefile.in 
new/libostree-2026.2/Makefile.in
--- old/libostree-2026.1/Makefile.in    2026-04-10 21:56:45.000000000 +0200
+++ new/libostree-2026.2/Makefile.in    2026-07-01 19:07:02.000000000 +0200
@@ -666,7 +666,8 @@
        tests/test-pull-c$(EXEEXT) tests/test-repo$(EXEEXT) \
        tests/test-include-ostree-h$(EXEEXT) tests/test-kargs$(EXEEXT) \
        tests/test-rfc2616-dates$(EXEEXT) tests/test-pem$(EXEEXT) \
-       $(am__EXEEXT_4) $(am__EXEEXT_5)
+       tests/test-validate-utf8$(EXEEXT) $(am__EXEEXT_4) \
+       $(am__EXEEXT_5)
 @ENABLE_INSTALLED_TESTS_EXCLUSIVE_FALSE@am__EXEEXT_7 =  \
 @ENABLE_INSTALLED_TESTS_EXCLUSIVE_FALSE@       $(am__EXEEXT_6)
 am__EXEEXT_8 = tests/test-bloom$(EXEEXT) \
@@ -1577,6 +1578,17 @@
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
        $(tests_test_sysroot_c_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
        $(LDFLAGS) -o $@
+am_tests_test_validate_utf8_OBJECTS =  \
+       src/libostree/tests_test_validate_utf8-ostree-core.$(OBJEXT) \
+       src/libostree/tests_test_validate_utf8-ostree-varint.$(OBJEXT) \
+       tests/test_validate_utf8-test-validate-utf8.$(OBJEXT)
+tests_test_validate_utf8_OBJECTS =  \
+       $(am_tests_test_validate_utf8_OBJECTS)
+tests_test_validate_utf8_DEPENDENCIES = $(am__DEPENDENCIES_18)
+tests_test_validate_utf8_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(tests_test_validate_utf8_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
 am_tests_test_varint_OBJECTS =  \
        src/libostree/tests_test_varint-ostree-varint.$(OBJEXT) \
        tests/test_varint-test-varint.$(OBJEXT)
@@ -1718,6 +1730,8 @@
        src/libostree/$(DEPDIR)/tests_test_rfc2616_dates-ostree-date-utils.Po \
        src/libostree/$(DEPDIR)/tests_test_rollsum-ostree-rollsum.Po \
        src/libostree/$(DEPDIR)/tests_test_rollsum_cli-ostree-rollsum.Po \
+       src/libostree/$(DEPDIR)/tests_test_validate_utf8-ostree-core.Po \
+       src/libostree/$(DEPDIR)/tests_test_validate_utf8-ostree-varint.Po \
        src/libostree/$(DEPDIR)/tests_test_varint-ostree-varint.Po \
        src/libotcore/$(DEPDIR)/libotcore_la-otcore-ed25519-verify.Plo \
        src/libotcore/$(DEPDIR)/libotcore_la-otcore-prepare-root.Plo \
@@ -1842,6 +1856,7 @@
        tests/$(DEPDIR)/test_rollsum-test-rollsum.Po \
        tests/$(DEPDIR)/test_rollsum_cli-test-rollsum-cli.Po \
        tests/$(DEPDIR)/test_sysroot_c-test-sysroot-c.Po \
+       tests/$(DEPDIR)/test_validate_utf8-test-validate-utf8.Po \
        tests/$(DEPDIR)/test_varint-test-varint.Po
 am__mv = mv -f
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
@@ -1892,6 +1907,7 @@
        $(tests_test_rfc2616_dates_SOURCES) \
        $(tests_test_rollsum_SOURCES) \
        $(tests_test_rollsum_cli_SOURCES) tests/test-sysroot-c.c \
+       $(tests_test_validate_utf8_SOURCES) \
        $(tests_test_varint_SOURCES)
 DIST_SOURCES = $(libbsdiff_la_SOURCES) $(libbupsplit_la_SOURCES) \
        $(libglnx_la_SOURCES) $(am__libostree_1_la_SOURCES_DIST) \
@@ -1925,6 +1941,7 @@
        $(tests_test_rfc2616_dates_SOURCES) \
        $(tests_test_rollsum_SOURCES) \
        $(tests_test_rollsum_cli_SOURCES) tests/test-sysroot-c.c \
+       $(tests_test_validate_utf8_SOURCES) \
        $(tests_test_varint_SOURCES)
 RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
        ctags-recursive dvi-recursive html-recursive info-recursive \
@@ -3262,8 +3279,8 @@
        tests/test-bootconfig-parser-internals tests/test-basic-c \
        tests/test-sysroot-c tests/test-pull-c tests/test-repo \
        tests/test-include-ostree-h tests/test-kargs \
-       tests/test-rfc2616-dates tests/test-pem $(am__append_91) \
-       $(am__append_94)
+       tests/test-rfc2616-dates tests/test-pem \
+       tests/test-validate-utf8 $(am__append_91) $(am__append_94)
 @USE_LIBSOUP_OR_LIBSOUP3_TRUE@ostree_trivial_httpd_SOURCES = 
src/ostree/ostree-trivial-httpd.c
 @USE_LIBSOUP_OR_LIBSOUP3_TRUE@ostree_trivial_httpd_CFLAGS = 
$(common_tests_cflags) $(OT_INTERNAL_SOUP_CFLAGS)
 @USE_LIBSOUP_OR_LIBSOUP3_TRUE@ostree_trivial_httpd_LDADD = 
$(common_tests_ldadd) $(OT_INTERNAL_SOUP_LIBS)
@@ -3356,6 +3373,13 @@
 
 tests_test_pem_CFLAGS = $(TESTS_CFLAGS)
 tests_test_pem_LDADD = $(TESTS_LDADD)
+tests_test_validate_utf8_SOURCES = \
+       src/libostree/ostree-core.c \
+       src/libostree/ostree-varint.c \
+       tests/test-validate-utf8.c
+
+tests_test_validate_utf8_CFLAGS = $(TESTS_CFLAGS) $(libglnx_cflags)
+tests_test_validate_utf8_LDADD = $(TESTS_LDADD)
 tests_test_commit_sign_sh_ext_CFLAGS = $(TESTS_CFLAGS)
 tests_test_commit_sign_sh_ext_LDADD = $(TESTS_LDADD)
 @USE_GPGME_TRUE@tests_test_gpg_verify_result_SOURCES = \
@@ -4837,6 +4861,18 @@
 tests/test-sysroot-c$(EXEEXT): $(tests_test_sysroot_c_OBJECTS) 
$(tests_test_sysroot_c_DEPENDENCIES) $(EXTRA_tests_test_sysroot_c_DEPENDENCIES) 
tests/$(am__dirstamp)
        @rm -f tests/test-sysroot-c$(EXEEXT)
        $(AM_V_CCLD)$(tests_test_sysroot_c_LINK) 
$(tests_test_sysroot_c_OBJECTS) $(tests_test_sysroot_c_LDADD) $(LIBS)
+src/libostree/tests_test_validate_utf8-ostree-core.$(OBJEXT):  \
+       src/libostree/$(am__dirstamp) \
+       src/libostree/$(DEPDIR)/$(am__dirstamp)
+src/libostree/tests_test_validate_utf8-ostree-varint.$(OBJEXT):  \
+       src/libostree/$(am__dirstamp) \
+       src/libostree/$(DEPDIR)/$(am__dirstamp)
+tests/test_validate_utf8-test-validate-utf8.$(OBJEXT):  \
+       tests/$(am__dirstamp) tests/$(DEPDIR)/$(am__dirstamp)
+
+tests/test-validate-utf8$(EXEEXT): $(tests_test_validate_utf8_OBJECTS) 
$(tests_test_validate_utf8_DEPENDENCIES) 
$(EXTRA_tests_test_validate_utf8_DEPENDENCIES) tests/$(am__dirstamp)
+       @rm -f tests/test-validate-utf8$(EXEEXT)
+       $(AM_V_CCLD)$(tests_test_validate_utf8_LINK) 
$(tests_test_validate_utf8_OBJECTS) $(tests_test_validate_utf8_LDADD) $(LIBS)
 src/libostree/tests_test_varint-ostree-varint.$(OBJEXT):  \
        src/libostree/$(am__dirstamp) \
        src/libostree/$(DEPDIR)/$(am__dirstamp)
@@ -5193,6 +5229,8 @@
 @AMDEP_TRUE@@am__include@ 
@am__quote@src/libostree/$(DEPDIR)/tests_test_rfc2616_dates-ostree-date-utils.Po@am__quote@
 # am--include-marker
 @AMDEP_TRUE@@am__include@ 
@am__quote@src/libostree/$(DEPDIR)/tests_test_rollsum-ostree-rollsum.Po@am__quote@
 # am--include-marker
 @AMDEP_TRUE@@am__include@ 
@am__quote@src/libostree/$(DEPDIR)/tests_test_rollsum_cli-ostree-rollsum.Po@am__quote@
 # am--include-marker
+@AMDEP_TRUE@@am__include@ 
@am__quote@src/libostree/$(DEPDIR)/tests_test_validate_utf8-ostree-core.Po@am__quote@
 # am--include-marker
+@AMDEP_TRUE@@am__include@ 
@am__quote@src/libostree/$(DEPDIR)/tests_test_validate_utf8-ostree-varint.Po@am__quote@
 # am--include-marker
 @AMDEP_TRUE@@am__include@ 
@am__quote@src/libostree/$(DEPDIR)/tests_test_varint-ostree-varint.Po@am__quote@
 # am--include-marker
 @AMDEP_TRUE@@am__include@ 
@am__quote@src/libotcore/$(DEPDIR)/libotcore_la-otcore-ed25519-verify.Plo@am__quote@
 # am--include-marker
 @AMDEP_TRUE@@am__include@ 
@am__quote@src/libotcore/$(DEPDIR)/libotcore_la-otcore-prepare-root.Plo@am__quote@
 # am--include-marker
@@ -5317,6 +5355,7 @@
 @AMDEP_TRUE@@am__include@ 
@am__quote@tests/$(DEPDIR)/test_rollsum-test-rollsum.Po@am__quote@ # 
am--include-marker
 @AMDEP_TRUE@@am__include@ 
@am__quote@tests/$(DEPDIR)/test_rollsum_cli-test-rollsum-cli.Po@am__quote@ # 
am--include-marker
 @AMDEP_TRUE@@am__include@ 
@am__quote@tests/$(DEPDIR)/test_sysroot_c-test-sysroot-c.Po@am__quote@ # 
am--include-marker
+@AMDEP_TRUE@@am__include@ 
@am__quote@tests/$(DEPDIR)/test_validate_utf8-test-validate-utf8.Po@am__quote@ 
# am--include-marker
 @AMDEP_TRUE@@am__include@ 
@am__quote@tests/$(DEPDIR)/test_varint-test-varint.Po@am__quote@ # 
am--include-marker
 
 $(am__depfiles_remade):
@@ -7890,6 +7929,48 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) 
$(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) 
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tests_test_sysroot_c_CFLAGS) $(CFLAGS) 
-c -o tests/test_sysroot_c-test-sysroot-c.obj `if test -f 
'tests/test-sysroot-c.c'; then $(CYGPATH_W) 'tests/test-sysroot-c.c'; else 
$(CYGPATH_W) '$(srcdir)/tests/test-sysroot-c.c'; fi`
 
+src/libostree/tests_test_validate_utf8-ostree-core.o: 
src/libostree/ostree-core.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) 
$(AM_CPPFLAGS) $(CPPFLAGS) $(tests_test_validate_utf8_CFLAGS) $(CFLAGS) -MT 
src/libostree/tests_test_validate_utf8-ostree-core.o -MD -MP -MF 
src/libostree/$(DEPDIR)/tests_test_validate_utf8-ostree-core.Tpo -c -o 
src/libostree/tests_test_validate_utf8-ostree-core.o `test -f 
'src/libostree/ostree-core.c' || echo '$(srcdir)/'`src/libostree/ostree-core.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) 
src/libostree/$(DEPDIR)/tests_test_validate_utf8-ostree-core.Tpo 
src/libostree/$(DEPDIR)/tests_test_validate_utf8-ostree-core.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      
$(AM_V_CC)source='src/libostree/ostree-core.c' 
object='src/libostree/tests_test_validate_utf8-ostree-core.o' libtool=no 
@AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) 
$(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) 
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tests_test_validate_utf8_CFLAGS) 
$(CFLAGS) -c -o src/libostree/tests_test_validate_utf8-ostree-core.o `test -f 
'src/libostree/ostree-core.c' || echo '$(srcdir)/'`src/libostree/ostree-core.c
+
+src/libostree/tests_test_validate_utf8-ostree-core.obj: 
src/libostree/ostree-core.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) 
$(AM_CPPFLAGS) $(CPPFLAGS) $(tests_test_validate_utf8_CFLAGS) $(CFLAGS) -MT 
src/libostree/tests_test_validate_utf8-ostree-core.obj -MD -MP -MF 
src/libostree/$(DEPDIR)/tests_test_validate_utf8-ostree-core.Tpo -c -o 
src/libostree/tests_test_validate_utf8-ostree-core.obj `if test -f 
'src/libostree/ostree-core.c'; then $(CYGPATH_W) 'src/libostree/ostree-core.c'; 
else $(CYGPATH_W) '$(srcdir)/src/libostree/ostree-core.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) 
src/libostree/$(DEPDIR)/tests_test_validate_utf8-ostree-core.Tpo 
src/libostree/$(DEPDIR)/tests_test_validate_utf8-ostree-core.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      
$(AM_V_CC)source='src/libostree/ostree-core.c' 
object='src/libostree/tests_test_validate_utf8-ostree-core.obj' libtool=no 
@AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) 
$(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) 
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tests_test_validate_utf8_CFLAGS) 
$(CFLAGS) -c -o src/libostree/tests_test_validate_utf8-ostree-core.obj `if test 
-f 'src/libostree/ostree-core.c'; then $(CYGPATH_W) 
'src/libostree/ostree-core.c'; else $(CYGPATH_W) 
'$(srcdir)/src/libostree/ostree-core.c'; fi`
+
+src/libostree/tests_test_validate_utf8-ostree-varint.o: 
src/libostree/ostree-varint.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) 
$(AM_CPPFLAGS) $(CPPFLAGS) $(tests_test_validate_utf8_CFLAGS) $(CFLAGS) -MT 
src/libostree/tests_test_validate_utf8-ostree-varint.o -MD -MP -MF 
src/libostree/$(DEPDIR)/tests_test_validate_utf8-ostree-varint.Tpo -c -o 
src/libostree/tests_test_validate_utf8-ostree-varint.o `test -f 
'src/libostree/ostree-varint.c' || echo 
'$(srcdir)/'`src/libostree/ostree-varint.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) 
src/libostree/$(DEPDIR)/tests_test_validate_utf8-ostree-varint.Tpo 
src/libostree/$(DEPDIR)/tests_test_validate_utf8-ostree-varint.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      
$(AM_V_CC)source='src/libostree/ostree-varint.c' 
object='src/libostree/tests_test_validate_utf8-ostree-varint.o' libtool=no 
@AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) 
$(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) 
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tests_test_validate_utf8_CFLAGS) 
$(CFLAGS) -c -o src/libostree/tests_test_validate_utf8-ostree-varint.o `test -f 
'src/libostree/ostree-varint.c' || echo 
'$(srcdir)/'`src/libostree/ostree-varint.c
+
+src/libostree/tests_test_validate_utf8-ostree-varint.obj: 
src/libostree/ostree-varint.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) 
$(AM_CPPFLAGS) $(CPPFLAGS) $(tests_test_validate_utf8_CFLAGS) $(CFLAGS) -MT 
src/libostree/tests_test_validate_utf8-ostree-varint.obj -MD -MP -MF 
src/libostree/$(DEPDIR)/tests_test_validate_utf8-ostree-varint.Tpo -c -o 
src/libostree/tests_test_validate_utf8-ostree-varint.obj `if test -f 
'src/libostree/ostree-varint.c'; then $(CYGPATH_W) 
'src/libostree/ostree-varint.c'; else $(CYGPATH_W) 
'$(srcdir)/src/libostree/ostree-varint.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) 
src/libostree/$(DEPDIR)/tests_test_validate_utf8-ostree-varint.Tpo 
src/libostree/$(DEPDIR)/tests_test_validate_utf8-ostree-varint.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      
$(AM_V_CC)source='src/libostree/ostree-varint.c' 
object='src/libostree/tests_test_validate_utf8-ostree-varint.obj' libtool=no 
@AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) 
$(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) 
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tests_test_validate_utf8_CFLAGS) 
$(CFLAGS) -c -o src/libostree/tests_test_validate_utf8-ostree-varint.obj `if 
test -f 'src/libostree/ostree-varint.c'; then $(CYGPATH_W) 
'src/libostree/ostree-varint.c'; else $(CYGPATH_W) 
'$(srcdir)/src/libostree/ostree-varint.c'; fi`
+
+tests/test_validate_utf8-test-validate-utf8.o: tests/test-validate-utf8.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) 
$(AM_CPPFLAGS) $(CPPFLAGS) $(tests_test_validate_utf8_CFLAGS) $(CFLAGS) -MT 
tests/test_validate_utf8-test-validate-utf8.o -MD -MP -MF 
tests/$(DEPDIR)/test_validate_utf8-test-validate-utf8.Tpo -c -o 
tests/test_validate_utf8-test-validate-utf8.o `test -f 
'tests/test-validate-utf8.c' || echo '$(srcdir)/'`tests/test-validate-utf8.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) 
tests/$(DEPDIR)/test_validate_utf8-test-validate-utf8.Tpo 
tests/$(DEPDIR)/test_validate_utf8-test-validate-utf8.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      
$(AM_V_CC)source='tests/test-validate-utf8.c' 
object='tests/test_validate_utf8-test-validate-utf8.o' libtool=no 
@AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) 
$(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) 
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tests_test_validate_utf8_CFLAGS) 
$(CFLAGS) -c -o tests/test_validate_utf8-test-validate-utf8.o `test -f 
'tests/test-validate-utf8.c' || echo '$(srcdir)/'`tests/test-validate-utf8.c
+
+tests/test_validate_utf8-test-validate-utf8.obj: tests/test-validate-utf8.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) 
$(AM_CPPFLAGS) $(CPPFLAGS) $(tests_test_validate_utf8_CFLAGS) $(CFLAGS) -MT 
tests/test_validate_utf8-test-validate-utf8.obj -MD -MP -MF 
tests/$(DEPDIR)/test_validate_utf8-test-validate-utf8.Tpo -c -o 
tests/test_validate_utf8-test-validate-utf8.obj `if test -f 
'tests/test-validate-utf8.c'; then $(CYGPATH_W) 'tests/test-validate-utf8.c'; 
else $(CYGPATH_W) '$(srcdir)/tests/test-validate-utf8.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) 
tests/$(DEPDIR)/test_validate_utf8-test-validate-utf8.Tpo 
tests/$(DEPDIR)/test_validate_utf8-test-validate-utf8.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      
$(AM_V_CC)source='tests/test-validate-utf8.c' 
object='tests/test_validate_utf8-test-validate-utf8.obj' libtool=no 
@AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) 
$(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) 
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tests_test_validate_utf8_CFLAGS) 
$(CFLAGS) -c -o tests/test_validate_utf8-test-validate-utf8.obj `if test -f 
'tests/test-validate-utf8.c'; then $(CYGPATH_W) 'tests/test-validate-utf8.c'; 
else $(CYGPATH_W) '$(srcdir)/tests/test-validate-utf8.c'; fi`
+
 src/libostree/tests_test_varint-ostree-varint.o: src/libostree/ostree-varint.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) 
$(AM_CPPFLAGS) $(CPPFLAGS) $(tests_test_varint_CFLAGS) $(CFLAGS) -MT 
src/libostree/tests_test_varint-ostree-varint.o -MD -MP -MF 
src/libostree/$(DEPDIR)/tests_test_varint-ostree-varint.Tpo -c -o 
src/libostree/tests_test_varint-ostree-varint.o `test -f 
'src/libostree/ostree-varint.c' || echo 
'$(srcdir)/'`src/libostree/ostree-varint.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) 
src/libostree/$(DEPDIR)/tests_test_varint-ostree-varint.Tpo 
src/libostree/$(DEPDIR)/tests_test_varint-ostree-varint.Po
@@ -8856,6 +8937,13 @@
        --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)
+tests/test-validate-utf8.log: tests/test-validate-utf8$(EXEEXT)
+       @p='tests/test-validate-utf8$(EXEEXT)'; \
+       b='tests/test-validate-utf8'; \
+       $(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)
 tests/test-gpg-verify-result.log: tests/test-gpg-verify-result$(EXEEXT)
        @p='tests/test-gpg-verify-result$(EXEEXT)'; \
        b='tests/test-gpg-verify-result'; \
@@ -10153,6 +10241,8 @@
        -rm -f 
src/libostree/$(DEPDIR)/tests_test_rfc2616_dates-ostree-date-utils.Po
        -rm -f src/libostree/$(DEPDIR)/tests_test_rollsum-ostree-rollsum.Po
        -rm -f src/libostree/$(DEPDIR)/tests_test_rollsum_cli-ostree-rollsum.Po
+       -rm -f src/libostree/$(DEPDIR)/tests_test_validate_utf8-ostree-core.Po
+       -rm -f src/libostree/$(DEPDIR)/tests_test_validate_utf8-ostree-varint.Po
        -rm -f src/libostree/$(DEPDIR)/tests_test_varint-ostree-varint.Po
        -rm -f src/libotcore/$(DEPDIR)/libotcore_la-otcore-ed25519-verify.Plo
        -rm -f src/libotcore/$(DEPDIR)/libotcore_la-otcore-prepare-root.Plo
@@ -10277,6 +10367,7 @@
        -rm -f tests/$(DEPDIR)/test_rollsum-test-rollsum.Po
        -rm -f tests/$(DEPDIR)/test_rollsum_cli-test-rollsum-cli.Po
        -rm -f tests/$(DEPDIR)/test_sysroot_c-test-sysroot-c.Po
+       -rm -f tests/$(DEPDIR)/test_validate_utf8-test-validate-utf8.Po
        -rm -f tests/$(DEPDIR)/test_varint-test-varint.Po
        -rm -f Makefile
 distclean-am: clean-am distclean-compile distclean-generic \
@@ -10459,6 +10550,8 @@
        -rm -f 
src/libostree/$(DEPDIR)/tests_test_rfc2616_dates-ostree-date-utils.Po
        -rm -f src/libostree/$(DEPDIR)/tests_test_rollsum-ostree-rollsum.Po
        -rm -f src/libostree/$(DEPDIR)/tests_test_rollsum_cli-ostree-rollsum.Po
+       -rm -f src/libostree/$(DEPDIR)/tests_test_validate_utf8-ostree-core.Po
+       -rm -f src/libostree/$(DEPDIR)/tests_test_validate_utf8-ostree-varint.Po
        -rm -f src/libostree/$(DEPDIR)/tests_test_varint-ostree-varint.Po
        -rm -f src/libotcore/$(DEPDIR)/libotcore_la-otcore-ed25519-verify.Plo
        -rm -f src/libotcore/$(DEPDIR)/libotcore_la-otcore-prepare-root.Plo
@@ -10583,6 +10676,7 @@
        -rm -f tests/$(DEPDIR)/test_rollsum-test-rollsum.Po
        -rm -f tests/$(DEPDIR)/test_rollsum_cli-test-rollsum-cli.Po
        -rm -f tests/$(DEPDIR)/test_sysroot_c-test-sysroot-c.Po
+       -rm -f tests/$(DEPDIR)/test_validate_utf8-test-validate-utf8.Po
        -rm -f tests/$(DEPDIR)/test_varint-test-varint.Po
        -rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.1/apidoc/html/index.html 
new/libostree-2026.2/apidoc/html/index.html
--- old/libostree-2026.1/apidoc/html/index.html 2026-04-10 21:57:07.000000000 
+0200
+++ new/libostree-2026.2/apidoc/html/index.html 2026-07-01 19:07:16.000000000 
+0200
@@ -14,7 +14,7 @@
 <div class="titlepage">
 <div>
 <div><table class="navigation" id="top" width="100%" cellpadding="2" 
cellspacing="0"><tr><th valign="middle"><p class="title">OSTree API 
references</p></th></tr></table></div>
-<div><p class="releaseinfo">for OSTree 2026.1</p></div>
+<div><p class="releaseinfo">for OSTree 2026.2</p></div>
 </div>
 <hr>
 </div>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libostree-2026.1/apidoc/html/ostree-Root-partition-mount-point.html 
new/libostree-2026.2/apidoc/html/ostree-Root-partition-mount-point.html
--- old/libostree-2026.1/apidoc/html/ostree-Root-partition-mount-point.html     
2026-04-10 21:57:07.000000000 +0200
+++ new/libostree-2026.2/apidoc/html/ostree-Root-partition-mount-point.html     
2026-07-01 19:07:16.000000000 +0200
@@ -2087,8 +2087,8 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>osname</p></td>
-<td class="parameter_description"><p>osname to use for merge deployment. 
</p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym 
title="NULL is OK, both for passing and for returning."><span 
class="acronym">allow-none</span></acronym>]</span></td>
+<td class="parameter_description"><p>osname to use for merge 
deployment</p></td>
+<td class="parameter_annotations"> </td>
 </tr>
 <tr>
 <td class="parameter_name"><p>revision</p></td>
@@ -2101,14 +2101,9 @@
 <td class="parameter_annotations"><span class="annotation">[<acronym 
title="NULL is OK, both for passing and for returning."><span 
class="acronym">allow-none</span></acronym>]</span></td>
 </tr>
 <tr>
-<td class="parameter_name"><p>merge_deployment</p></td>
-<td class="parameter_description"><p>Use this deployment for merge path. 
</p></td>
-<td class="parameter_annotations"><span class="annotation">[<acronym 
title="NULL is OK, both for passing and for returning."><span 
class="acronym">allow-none</span></acronym>]</span></td>
-</tr>
-<tr>
 <td class="parameter_name"><p>opts</p></td>
-<td class="parameter_description"><p>Options</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p>Options. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym 
title="NULL may be passed as the value in, out, in-out; or as a return 
value."><span class="acronym">nullable</span></acronym>]</span></td>
 </tr>
 <tr>
 <td class="parameter_name"><p>out_new_deployment</p></td>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libostree-2026.1/apidoc/html/ostree-ostree-version.html 
new/libostree-2026.2/apidoc/html/ostree-ostree-version.html
--- old/libostree-2026.1/apidoc/html/ostree-ostree-version.html 2026-04-10 
21:57:07.000000000 +0200
+++ new/libostree-2026.2/apidoc/html/ostree-ostree-version.html 2026-07-01 
19:07:16.000000000 +0200
@@ -126,7 +126,7 @@
 <hr>
 <div class="refsect2">
 <a name="OSTREE-RELEASE-VERSION:CAPS"></a><h3>OSTREE_RELEASE_VERSION</h3>
-<pre class="programlisting">#define OSTREE_RELEASE_VERSION (1)
+<pre class="programlisting">#define OSTREE_RELEASE_VERSION (2)
 </pre>
 <p>ostree release version component (e.g. 2 if <a class="link" 
href="ostree-ostree-version.html#OSTREE-VERSION:CAPS" 
title="OSTREE_VERSION"><code class="literal">OSTREE_VERSION</code></a> is 
2017.2)</p>
 <p class="since">Since: 2017.4</p>
@@ -134,7 +134,7 @@
 <hr>
 <div class="refsect2">
 <a name="OSTREE-VERSION:CAPS"></a><h3>OSTREE_VERSION</h3>
-<pre class="programlisting">#define OSTREE_VERSION (2026.1)
+<pre class="programlisting">#define OSTREE_VERSION (2026.2)
 </pre>
 <p>ostree version.</p>
 <p class="since">Since: 2017.4</p>
@@ -142,7 +142,7 @@
 <hr>
 <div class="refsect2">
 <a name="OSTREE-VERSION-S:CAPS"></a><h3>OSTREE_VERSION_S</h3>
-<pre class="programlisting">#define OSTREE_VERSION_S "2026.1"
+<pre class="programlisting">#define OSTREE_VERSION_S "2026.2"
 </pre>
 <p>ostree version, encoded as a string, useful for printing and
 concatenation.</p>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.1/apidoc/version.xml 
new/libostree-2026.2/apidoc/version.xml
--- old/libostree-2026.1/apidoc/version.xml     2026-04-10 21:56:59.000000000 
+0200
+++ new/libostree-2026.2/apidoc/version.xml     2026-07-01 19:07:10.000000000 
+0200
@@ -1 +1 @@
-2026.1
\ No newline at end of file
+2026.2
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.1/configure 
new/libostree-2026.2/configure
--- old/libostree-2026.1/configure      2026-04-10 21:56:43.000000000 +0200
+++ new/libostree-2026.2/configure      2026-07-01 19:07:01.000000000 +0200
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.72 for libostree 2026.1.
+# Generated by GNU Autoconf 2.72 for libostree 2026.2.
 #
 # Report bugs to <[email protected]>.
 #
@@ -614,8 +614,8 @@
 # Identity of this package.
 PACKAGE_NAME='libostree'
 PACKAGE_TARNAME='libostree'
-PACKAGE_VERSION='2026.1'
-PACKAGE_STRING='libostree 2026.1'
+PACKAGE_VERSION='2026.2'
+PACKAGE_STRING='libostree 2026.2'
 PACKAGE_BUGREPORT='[email protected]'
 PACKAGE_URL=''
 
@@ -1622,7 +1622,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 libostree 2026.1 to adapt to many kinds of systems.
+'configure' configures libostree 2026.2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1693,7 +1693,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of libostree 2026.1:";;
+     short | recursive ) echo "Configuration of libostree 2026.2:";;
    esac
   cat <<\_ACEOF
 
@@ -1965,7 +1965,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-libostree configure 2026.1
+libostree configure 2026.2
 generated by GNU Autoconf 2.72
 
 Copyright (C) 2023 Free Software Foundation, Inc.
@@ -2350,7 +2350,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by libostree $as_me 2026.1, which was
+It was created by libostree $as_me 2026.2, which was
 generated by GNU Autoconf 2.72.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -3835,7 +3835,7 @@
 
 # Define the identity of the package.
  PACKAGE='libostree'
- VERSION='2026.1'
+ VERSION='2026.2'
 
 
 # Some tools Automake needs.
@@ -6687,9 +6687,9 @@
 
 YEAR_VERSION=2026
 
-RELEASE_VERSION=1
+RELEASE_VERSION=2
 
-PACKAGE_VERSION=2026.1
+PACKAGE_VERSION=2026.2
 
 
 pkglibexecdir=$libexecdir/$PACKAGE
@@ -22004,7 +22004,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by libostree $as_me 2026.1, which was
+This file was extended by libostree $as_me 2026.2, which was
 generated by GNU Autoconf 2.72.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -22072,7 +22072,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-libostree config.status 2026.1
+libostree config.status 2026.2
 configured by $0, generated by GNU Autoconf 2.72,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.1/configure.ac 
new/libostree-2026.2/configure.ac
--- old/libostree-2026.1/configure.ac   2026-04-10 21:55:51.000000000 +0200
+++ new/libostree-2026.2/configure.ac   2026-07-01 19:02:04.000000000 +0200
@@ -1,7 +1,7 @@
 AC_PREREQ([2.63])
 dnl To perform a release, follow the instructions in `docs/CONTRIBUTING.md`.
 m4_define([year_version], [2026])
-m4_define([release_version], [1])
+m4_define([release_version], [2])
 m4_define([package_version], [year_version.release_version])
 AC_INIT([libostree], [package_version], [[email protected]])
 is_release_build=yes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libostree-2026.1/src/libostree/ostree-bootloader-zipl.c 
new/libostree-2026.2/src/libostree/ostree-bootloader-zipl.c
--- old/libostree-2026.1/src/libostree/ostree-bootloader-zipl.c 2026-04-07 
02:00:06.000000000 +0200
+++ new/libostree-2026.2/src/libostree/ostree-bootloader-zipl.c 2026-06-29 
21:06:12.000000000 +0200
@@ -338,7 +338,7 @@
 
   pid_t self = getpid ();
 
-  // Store kernel options to temp file, so `genprotimg` can later embed it
+  // Store kernel options to temp file, so `pvimg` can later embed it
   g_auto (GLnxTmpfile) cmdline = {
     0,
   };
@@ -356,19 +356,15 @@
     return FALSE;
   g_autofree gchar *ramdisk_filename = g_strdup_printf ("/proc/%d/fd/%d", 
self, ramdisk.fd);
 
-  // Since s390-tools commit f4cf4ae6ebb1 (Remove genprotimg-C and switch to 
genprotimg-Rust
-  // implementation) 'genprotimg' is just a symlink to 'pvimg create', which 
by default doesn't
-  // overwrite the output image, but introduces the '--overwrite' flag for 
this. Let's silently
-  // remove the file to support both tools
-  (void)unlink (SECURE_EXECUTION_BOOT_IMAGE);
-
   g_autoptr (GPtrArray) argv = g_ptr_array_new ();
-  g_ptr_array_add (argv, "genprotimg");
-  g_ptr_array_add (argv, "-i");
+  g_ptr_array_add (argv, "pvimg");
+  g_ptr_array_add (argv, "create");
+  g_ptr_array_add (argv, "--verbose");
+  g_ptr_array_add (argv, "--kernel");
   g_ptr_array_add (argv, vmlinuz);
-  g_ptr_array_add (argv, "-r");
+  g_ptr_array_add (argv, "--ramdisk");
   g_ptr_array_add (argv, ramdisk_filename);
-  g_ptr_array_add (argv, "-p");
+  g_ptr_array_add (argv, "--parmfile");
   g_ptr_array_add (argv, cmdline_filename);
   for (guint i = 0; i < keys->len; ++i)
     {
@@ -378,17 +374,18 @@
       ot_journal_print (LOG_INFO, "s390x SE: key[%d]: %s", i + 1, key);
     }
   g_ptr_array_add (argv, "--no-verify");
-  g_ptr_array_add (argv, "-o");
+  g_ptr_array_add (argv, "--overwrite");
+  g_ptr_array_add (argv, "--output");
   g_ptr_array_add (argv, SECURE_EXECUTION_BOOT_IMAGE);
   g_ptr_array_add (argv, NULL);
 
   gint status = 0;
   if (!g_spawn_sync (NULL, (char **)argv->pdata, NULL, G_SPAWN_SEARCH_PATH, 
NULL, NULL, NULL, NULL,
                      &status, error))
-    return glnx_prefix_error (error, "s390x SE: spawning genprotimg");
+    return glnx_prefix_error (error, "s390x SE: spawning pvimg");
 
   if (!g_spawn_check_exit_status (status, error))
-    return glnx_prefix_error (error, "s390x SE: `genprotimg` failed");
+    return glnx_prefix_error (error, "s390x SE: `pvimg` failed");
 
   ot_journal_print (LOG_INFO, "s390x SE: `%s` generated", 
SECURE_EXECUTION_BOOT_IMAGE);
   return TRUE;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.1/src/libostree/ostree-core.c 
new/libostree-2026.2/src/libostree/ostree-core.c
--- old/libostree-2026.1/src/libostree/ostree-core.c    2026-04-07 
02:00:06.000000000 +0200
+++ new/libostree-2026.2/src/libostree/ostree-core.c    2026-06-29 
21:06:12.000000000 +0200
@@ -226,6 +226,12 @@
 {
   g_autoptr (GMatchInfo) match = NULL;
 
+  g_return_val_if_fail (rev != NULL, FALSE);
+
+  /* Validate the string is valid UTF-8 */
+  if (!g_utf8_validate (rev, -1, NULL))
+    return glnx_throw (error, "Invalid ref name: not valid UTF-8");
+
   static gsize regex_initialized;
   static GRegex *regex;
   if (g_once_init_enter (&regex_initialized))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.1/src/libostree/ostree-kernel-args.c 
new/libostree-2026.2/src/libostree/ostree-kernel-args.c
--- old/libostree-2026.1/src/libostree/ostree-kernel-args.c     2026-04-07 
02:00:06.000000000 +0200
+++ new/libostree-2026.2/src/libostree/ostree-kernel-args.c     2026-06-29 
21:06:12.000000000 +0200
@@ -188,13 +188,14 @@
         }
     }
 
-  // Add the last slice
-  if (!quoted)
-    g_ptr_array_add (strv, g_strndup (start, str + len - start));
-  else
+  // Add the last slice if non-empty. If there's an unterminated quote
+  // (e.g. from bootloader-reformatted /proc/cmdline), treat the
+  // remainder as a single token rather than aborting.
+  if (str + len > start)
     {
-      g_debug ("Missing terminating quote in '%s'.\n", str);
-      g_assert_false (quoted);
+      if (quoted)
+        g_debug ("Missing terminating quote in '%s', treating remainder as 
single token.\n", str);
+      g_ptr_array_add (strv, g_strndup (start, str + len - start));
     }
 
   g_ptr_array_add (strv, NULL);
@@ -681,7 +682,7 @@
 
   g_strchomp (proc_cmdline);
 
-  proc_cmdline_args = g_strsplit (proc_cmdline, " ", -1);
+  proc_cmdline_args = split_kernel_args (proc_cmdline);
   ostree_kernel_args_append_argv_filtered (kargs, proc_cmdline_args, 
filtered_prefixes);
 
   return TRUE;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libostree-2026.1/src/libostree/ostree-repo-checkout.c 
new/libostree-2026.2/src/libostree/ostree-repo-checkout.c
--- old/libostree-2026.1/src/libostree/ostree-repo-checkout.c   2026-04-07 
02:00:06.000000000 +0200
+++ new/libostree-2026.2/src/libostree/ostree-repo-checkout.c   2026-06-26 
15:20:31.000000000 +0200
@@ -1031,15 +1031,19 @@
       g_autoptr (GVariant) dir_file_contents = g_variant_get_child_value 
(dirtree, 0);
       GVariantIter viter;
       const char *fname;
-      g_autoptr (GVariant) contents_csum_v = NULL;
       g_variant_iter_init (&viter, dir_file_contents);
-      while (g_variant_iter_loop (&viter, "(&s@ay)", &fname, &contents_csum_v))
+      /* We only need the name; pass NULL to skip extracting the checksum.
+       * Note that breaking out of a g_variant_iter_loop() without freeing
+       * extracted values would leak them - and a leaked child variant pins
+       * the whole (possibly mmap'd) dirtree object in memory, which kept
+       * the filesystem busy across the final unmount in `bootc install`.
+       */
+      while (g_variant_iter_loop (&viter, "(&s@ay)", &fname, NULL))
         {
           is_opaque_whiteout = (g_str_equal (fname, OPAQUE_WHITEOUT_NAME));
           if (is_opaque_whiteout)
             break;
         }
-      contents_csum_v = NULL; /* iter_loop freed it */
     }
 
   /* First, make the directory.  Push a new scope in case we end up using
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libostree-2026.1/src/libostree/ostree-repo-static-delta-core.c 
new/libostree-2026.2/src/libostree/ostree-repo-static-delta-core.c
--- old/libostree-2026.1/src/libostree/ostree-repo-static-delta-core.c  
2026-04-07 02:00:06.000000000 +0200
+++ new/libostree-2026.2/src/libostree/ostree-repo-static-delta-core.c  
2026-06-26 15:20:31.000000000 +0200
@@ -817,7 +817,6 @@
     *out_was_heuristic = TRUE;
 
   guint64 total_size = 0;
-  guint64 total_usize = 0;
   guint total_objects = 0;
   {
     g_autoptr (GVariant) meta_entries = NULL;
@@ -837,8 +836,6 @@
 
         total_objects += n_objects;
         total_size += size;
-        total_usize += usize;
-
         if (size > usize)
           {
             double ratio = ((double)size) / ((double)usize);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.1/src/libostree/ostree-repo.c 
new/libostree-2026.2/src/libostree/ostree-repo.c
--- old/libostree-2026.1/src/libostree/ostree-repo.c    2026-04-07 
02:00:06.000000000 +0200
+++ new/libostree-2026.2/src/libostree/ostree-repo.c    2026-06-29 
21:06:12.000000000 +0200
@@ -3176,6 +3176,14 @@
                                                 NULL, 
&min_free_space_percent_str, error))
           return FALSE;
 
+        /* Validate that the string contains only digits */
+        for (const char *p = min_free_space_percent_str; *p; p++)
+          {
+            if (!g_ascii_isdigit (*p))
+              return glnx_throw (error, "Invalid min-free-space-percent '%s': 
must be a number",
+                                 min_free_space_percent_str);
+          }
+
         self->min_free_space_percent = g_ascii_strtoull 
(min_free_space_percent_str, NULL, 10);
         if (self->min_free_space_percent > 99)
           return glnx_throw (error, "Invalid min-free-space-percent '%s'",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libostree-2026.1/src/libostree/ostree-sysroot-deploy.c 
new/libostree-2026.2/src/libostree/ostree-sysroot-deploy.c
--- old/libostree-2026.1/src/libostree/ostree-sysroot-deploy.c  2026-04-07 
02:00:12.000000000 +0200
+++ new/libostree-2026.2/src/libostree/ostree-sysroot-deploy.c  2026-06-29 
21:06:12.000000000 +0200
@@ -3795,14 +3795,25 @@
   return TRUE;
 }
 
+/* Merge all entries from an a{ss} GVariant into a string→string hash table.
+ * Used to accumulate bootconfig-extra keys from multiple sources during 
staging. */
+static void
+merge_extra_variant_into_table (GVariant *extra, GHashTable *table)
+{
+  GVariantIter iter;
+  const char *k, *v;
+  g_variant_iter_init (&iter, extra);
+  while (g_variant_iter_next (&iter, "{&s&s}", &k, &v))
+    g_hash_table_insert (table, g_strdup (k), g_strdup (v));
+}
+
 /**
  * ostree_sysroot_stage_tree_with_options:
  * @self: Sysroot
- * @osname: (allow-none): osname to use for merge deployment
+ * @osname: osname to use for merge deployment
  * @revision: Checksum to add
  * @origin: (allow-none): Origin to use for upgrades
- * @merge_deployment: (allow-none): Use this deployment for merge path
- * @opts: Options
+ * @opts: (nullable): Options
  * @out_new_deployment: (out): The new deployment path
  * @cancellable: Cancellable
  * @error: Error
@@ -3888,27 +3899,72 @@
    * These are custom keys set by consumers like bootc and need to survive
    * the staging roundtrip so they are preserved during finalization at 
shutdown.
    *
-   * First check the new deployment's bootconfig (in case the caller set keys
-   * on it directly).  If none found, fall back to the merge deployment's
-   * bootconfig, which carries the keys from the currently deployed BLS entry.
-   * This ensures that x-prefixed keys are inherited across staged deployments
-   * even though _ostree_deployment_set_bootconfig_from_kargs() creates a fresh
-   * bootconfig containing only the "options" key.
+   * Extension keys can come from three sources, merged in increasing
+   * priority order (higher-priority sources override lower ones for
+   * the same key):
+   *
+   *   1. The merge deployment's bootconfig (on-disk BLS from the
+   *      currently booted or pending deployment) — lowest priority
+   *   2. The previously staged deployment's bootconfig-extra (a prior
+   *      consumer like bootc may have staged keys that would be lost
+   *      when this new staging replaces the old staged GVariant)
+   *   3. The new deployment's bootconfig (caller set keys directly)
+   *      — highest priority
+   *
+   * This merge ensures that e.g. `bootc loader-entries set-options-for-source`
+   * followed by `rpm-ostree kargs --append` on the same boot preserves the
+   * source keys that bootc wrote into the first staged deployment.
    */
   {
-    GVariant *extra = NULL;
-    OstreeBootconfigParser *bootconfig = ostree_deployment_get_bootconfig 
(deployment);
-    if (bootconfig)
-      extra = _ostree_bootconfig_parser_get_extra_keys_variant (bootconfig);
-    if (!extra && merge_deployment)
+    g_autoptr (GHashTable) merged_extra
+        = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+
+    /* Priority 1 (lowest): merge deployment's bootconfig */
+    if (merge_deployment)
       {
         OstreeBootconfigParser *merge_bootconfig
             = ostree_deployment_get_bootconfig (merge_deployment);
         if (merge_bootconfig)
-          extra = _ostree_bootconfig_parser_get_extra_keys_variant 
(merge_bootconfig);
+          {
+            g_autoptr (GVariant) merge_extra
+                = _ostree_bootconfig_parser_get_extra_keys_variant 
(merge_bootconfig);
+            if (merge_extra)
+              merge_extra_variant_into_table (merge_extra, merged_extra);
+          }
+      }
+
+    /* Priority 2: previously staged deployment's bootconfig-extra.
+     * The staged deployment data is already loaded and cached in the
+     * OstreeSysroot during ostree_sysroot_load(). */
+    if (self->staged_deployment_data)
+      {
+        g_autoptr (GVariant) prev_extra = g_variant_lookup_value (
+            self->staged_deployment_data, "bootconfig-extra", (GVariantType 
*)"a{ss}");
+        if (prev_extra)
+          merge_extra_variant_into_table (prev_extra, merged_extra);
+      }
+
+    /* Priority 3 (highest): new deployment's bootconfig */
+    {
+      OstreeBootconfigParser *bootconfig = ostree_deployment_get_bootconfig 
(deployment);
+      if (bootconfig)
+        {
+          g_autoptr (GVariant) new_extra
+              = _ostree_bootconfig_parser_get_extra_keys_variant (bootconfig);
+          if (new_extra)
+            merge_extra_variant_into_table (new_extra, merged_extra);
+        }
+    }
+
+    if (g_hash_table_size (merged_extra) > 0)
+      {
+        g_auto (GVariantBuilder) extra_builder = 
OT_VARIANT_BUILDER_INITIALIZER;
+        g_variant_builder_init (&extra_builder, (GVariantType *)"a{ss}");
+        GLNX_HASH_TABLE_FOREACH_KV (merged_extra, const char *, k, const char 
*, v)
+          g_variant_builder_add (&extra_builder, "{ss}", k, v);
+        g_variant_builder_add (builder, "{sv}", "bootconfig-extra",
+                               g_variant_builder_end (&extra_builder));
       }
-    if (extra)
-      g_variant_builder_add (builder, "{sv}", "bootconfig-extra", extra);
   }
 
   const char *parent = dirname (strdupa (_OSTREE_SYSROOT_RUNSTATE_STAGED));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.1/src/libostree/ostree-version.h 
new/libostree-2026.2/src/libostree/ostree-version.h
--- old/libostree-2026.1/src/libostree/ostree-version.h 2026-04-10 
21:56:56.000000000 +0200
+++ new/libostree-2026.2/src/libostree/ostree-version.h 2026-07-01 
19:07:08.000000000 +0200
@@ -41,7 +41,7 @@
  *
  * Since: 2017.4
  */
-#define OSTREE_RELEASE_VERSION (1)
+#define OSTREE_RELEASE_VERSION (2)
 
 /**
  * OSTREE_VERSION
@@ -50,7 +50,7 @@
  *
  * Since: 2017.4
  */
-#define OSTREE_VERSION (2026.1)
+#define OSTREE_VERSION (2026.2)
 
 /**
  * OSTREE_VERSION_S:
@@ -60,7 +60,7 @@
  *
  * Since: 2017.4
  */
-#define OSTREE_VERSION_S "2026.1"
+#define OSTREE_VERSION_S "2026.2"
 
 #define OSTREE_ENCODE_VERSION(year,release) \
         ((year) << 16 | (release))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.1/src/ostree/ostree-trivial-httpd.c 
new/libostree-2026.2/src/ostree/ostree-trivial-httpd.c
--- old/libostree-2026.1/src/ostree/ostree-trivial-httpd.c      2026-04-07 
02:00:06.000000000 +0200
+++ new/libostree-2026.2/src/ostree/ostree-trivial-httpd.c      2026-06-26 
15:20:31.000000000 +0200
@@ -281,7 +281,7 @@
 do_get (OtTrivialHttpd *self, SoupServer *server, SoupServerMessage *msg, 
const char *path)
 #endif
 {
-  char *slash;
+  const char *slash;
   int ret;
   struct stat stbuf;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.1/src/ostree/ot-builtin-pull-local.c 
new/libostree-2026.2/src/ostree/ot-builtin-pull-local.c
--- old/libostree-2026.1/src/ostree/ot-builtin-pull-local.c     2026-04-07 
02:00:06.000000000 +0200
+++ new/libostree-2026.2/src/ostree/ot-builtin-pull-local.c     2026-06-29 
21:06:12.000000000 +0200
@@ -164,6 +164,14 @@
         {
           const char *ref = argv[i];
 
+          /* Validate ref name is valid UTF-8 */
+          if (!g_utf8_validate (ref, -1, NULL))
+            {
+              g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
+                           "Invalid ref name: not valid UTF-8");
+              goto out;
+            }
+
           g_ptr_array_add (refs_to_fetch, (char *)ref);
         }
       g_ptr_array_add (refs_to_fetch, NULL);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.1/src/ostree/ot-builtin-pull.c 
new/libostree-2026.2/src/ostree/ot-builtin-pull.c
--- old/libostree-2026.1/src/ostree/ot-builtin-pull.c   2026-04-07 
02:00:06.000000000 +0200
+++ new/libostree-2026.2/src/ostree/ot-builtin-pull.c   2026-06-29 
21:06:12.000000000 +0200
@@ -262,10 +262,19 @@
                 {
                   guint j;
                   const char *override_commit_id = at + 1;
+                  g_autofree char *ref_name = g_strndup (argv[i], at - 
argv[i]);
 
                   if (!ostree_validate_checksum_string (override_commit_id, 
error))
                     goto out;
 
+                  /* Validate ref name is valid UTF-8 */
+                  if (!g_utf8_validate (ref_name, -1, NULL))
+                    {
+                      g_set_error (error, G_IO_ERROR, 
G_IO_ERROR_INVALID_ARGUMENT,
+                                   "Invalid ref name: not valid UTF-8");
+                      goto out;
+                    }
+
                   if (!override_commit_ids)
                     {
                       override_commit_ids = g_ptr_array_new_with_free_func 
(g_free);
@@ -276,10 +285,18 @@
                     }
 
                   g_ptr_array_add (override_commit_ids, g_strdup 
(override_commit_id));
-                  g_ptr_array_add (refs_to_fetch, g_strndup (argv[i], at - 
argv[i]));
+                  g_ptr_array_add (refs_to_fetch, g_steal_pointer (&ref_name));
                 }
               else
                 {
+                  /* Validate ref name is valid UTF-8 */
+                  if (!g_utf8_validate (argv[i], -1, NULL))
+                    {
+                      g_set_error (error, G_IO_ERROR, 
G_IO_ERROR_INVALID_ARGUMENT,
+                                   "Invalid ref name: not valid UTF-8");
+                      goto out;
+                    }
+
                   g_ptr_array_add (refs_to_fetch, g_strdup (argv[i]));
                   if (override_commit_ids)
                     g_ptr_array_add (override_commit_ids, g_strdup (""));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.1/tests/test-kargs.c 
new/libostree-2026.2/tests/test-kargs.c
--- old/libostree-2026.1/tests/test-kargs.c     2026-04-07 02:00:06.000000000 
+0200
+++ new/libostree-2026.2/tests/test-kargs.c     2026-06-29 21:06:12.000000000 
+0200
@@ -278,6 +278,55 @@
   g_assert_cmpint (7, ==, g_strv_length (kargs_list));
 }
 
+/* Regression test: parsing a /proc/cmdline-style string containing quoted
+ * kernel args with spaces must not crash.  Commit abc7d5b9 added a
+ * quote-aware splitter (split_kernel_args) but 
ostree_kernel_args_append_proc_cmdline
+ * still used a naive g_strsplit(" ") that broke quoted tokens apart, causing a
+ * g_assert_false(quoted) abort.
+ *
+ * Bootloaders may reformat quotes -- e.g. GRUB turns testparam="value with 
spaces"
+ * into "testparam=value with spaces" in /proc/cmdline.  Both forms must be 
handled.
+ */
+static void
+test_kargs_quoted_cmdline (void)
+{
+  /* Test 1: Standard quoted value (as stored by rpm-ostree) */
+  {
+    __attribute__ ((cleanup (ostree_kernel_args_cleanup))) OstreeKernelArgs 
*karg
+        = ostree_kernel_args_new ();
+    ostree_kernel_args_parse_append (karg,
+                                     "root=UUID=abc quiet testparam=\"value 
with spaces\" rw");
+    g_assert (check_string_existance (karg, "root=UUID=abc"));
+    g_assert (check_string_existance (karg, "quiet"));
+    g_assert (check_string_existance (karg, "testparam=\"value with 
spaces\""));
+    g_assert (check_string_existance (karg, "rw"));
+  }
+
+  /* Test 2: GRUB-reformatted quoting (quotes wrapping entire token)
+   * /proc/cmdline may show: "testparam=value with spaces" */
+  {
+    __attribute__ ((cleanup (ostree_kernel_args_cleanup))) OstreeKernelArgs 
*karg
+        = ostree_kernel_args_new ();
+    ostree_kernel_args_parse_append (karg,
+                                     "root=UUID=abc quiet \"testparam=value 
with spaces\" rw");
+    g_assert (check_string_existance (karg, "root=UUID=abc"));
+    g_assert (check_string_existance (karg, "quiet"));
+    g_assert (check_string_existance (karg, "\"testparam=value with 
spaces\""));
+    g_assert (check_string_existance (karg, "rw"));
+  }
+
+  /* Test 3: Multiple quoted args */
+  {
+    __attribute__ ((cleanup (ostree_kernel_args_cleanup))) OstreeKernelArgs 
*karg
+        = ostree_kernel_args_new ();
+    ostree_kernel_args_parse_append (karg, "foo=\"1 2\" bar=\"3 4\"");
+    g_assert (check_string_existance (karg, "foo=\"1 2\""));
+    g_assert (check_string_existance (karg, "bar=\"3 4\""));
+    g_auto (GStrv) kargs_list = ostree_kernel_args_to_strv (karg);
+    g_assert_cmpint (2, ==, g_strv_length (kargs_list));
+  }
+}
+
 int
 main (int argc, char *argv[])
 {
@@ -286,5 +335,6 @@
   g_test_add_func ("/kargs/kargs_append", test_kargs_append);
   g_test_add_func ("/kargs/kargs_delete", test_kargs_delete);
   g_test_add_func ("/kargs/kargs_replace", test_kargs_replace);
+  g_test_add_func ("/kargs/kargs_quoted_cmdline", test_kargs_quoted_cmdline);
   return g_test_run ();
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.1/tests/test-validate-utf8.c 
new/libostree-2026.2/tests/test-validate-utf8.c
--- old/libostree-2026.1/tests/test-validate-utf8.c     1970-01-01 
01:00:00.000000000 +0100
+++ new/libostree-2026.2/tests/test-validate-utf8.c     2026-07-01 
18:52:42.000000000 +0200
@@ -0,0 +1,109 @@
+/*
+ * SPDX-License-Identifier: LGPL-2.0+
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see 
<https://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+
+#include <gio/gio.h>
+#include <glib.h>
+#include <string.h>
+
+#include "libglnx.h"
+#include "ostree.h"
+
+/* Test that valid UTF-8 refs are accepted */
+static void
+test_valid_utf8_refs (void)
+{
+  g_autoptr (GError) error = NULL;
+
+  /* Valid ASCII ref */
+  g_assert_true (ostree_validate_rev ("my-branch", &error));
+  g_assert_no_error (error);
+
+  /* Valid ref with numbers */
+  g_assert_true (ostree_validate_rev ("branch-123", &error));
+  g_assert_no_error (error);
+
+  /* Valid ref with dots and underscores */
+  g_assert_true (ostree_validate_rev ("my.branch_name", &error));
+  g_assert_no_error (error);
+
+  /* Valid refspec with remote: "remote:branch" is a refspec, not a bare ref.
+   * ostree_validate_rev() only validates bare ref names; use
+   * ostree_parse_refspec() for the "remote:ref" form. */
+  {
+    g_autofree char *remote = NULL;
+    g_autofree char *ref = NULL;
+    g_assert_true (ostree_parse_refspec ("remote:branch", &remote, &ref, 
&error));
+    g_assert_no_error (error);
+    g_assert_cmpstr (remote, ==, "remote");
+    g_assert_cmpstr (ref, ==, "branch");
+  }
+
+  /* Valid ref with slashes */
+  g_assert_true (ostree_validate_rev ("path/to/branch", &error));
+  g_assert_no_error (error);
+}
+
+/* Test that invalid UTF-8 refs are rejected */
+static void
+test_invalid_utf8_refs (void)
+{
+  g_autoptr (GError) error = NULL;
+
+  /* Invalid UTF-8: 0xFF is never valid in UTF-8 */
+  const char invalid_ff[] = { 'b', 'r', 'a', 'n', 'c', 'h', '\xff', '\0' };
+  g_assert_false (ostree_validate_rev (invalid_ff, &error));
+  g_assert_nonnull (error);
+  g_clear_error (&error);
+
+  /* Invalid UTF-8: 0xFE is never valid in UTF-8 */
+  const char invalid_fe[] = { 'b', 'r', 'a', 'n', 'c', 'h', '\xfe', '\0' };
+  g_assert_false (ostree_validate_rev (invalid_fe, &error));
+  g_assert_nonnull (error);
+  g_clear_error (&error);
+
+  /* Invalid UTF-8: 0x80 without leading byte */
+  const char invalid_80[] = { 'b', 'r', 'a', 'n', 'c', 'h', '\x80', '\0' };
+  g_assert_false (ostree_validate_rev (invalid_80, &error));
+  g_assert_nonnull (error);
+  g_clear_error (&error);
+
+  /* Invalid UTF-8: truncated multi-byte sequence */
+  const char invalid_trunc[] = { 'b', 'r', 'a', 'n', 'c', 'h', '\xc3', '\0' };
+  g_assert_false (ostree_validate_rev (invalid_trunc, &error));
+  g_assert_nonnull (error);
+  g_clear_error (&error);
+
+  /* Invalid UTF-8: 0x333 as mentioned in issue #2959 */
+  const char invalid_333[]
+      = { 's', 'o', 'm', 'e', '-', 'b', 'r', 'a', 'n', 'c', 'h', '-',    'n', 
'a', 'm',
+          'e', '-', 'w', 'i', 't', 'h', '-', 'i', 'n', 'v', 'a', 'l',    'i', 
'd', '-',
+          'u', 't', 'f', '-', 's', 'y', 'm', 'b', 'o', 'l', '-', '\xdb', '\0' 
};
+  g_assert_false (ostree_validate_rev (invalid_333, &error));
+  g_assert_nonnull (error);
+  g_clear_error (&error);
+}
+
+int
+main (int argc, char **argv)
+{
+  g_test_init (&argc, &argv, NULL);
+  g_test_add_func ("/validate/valid-utf8-refs", test_valid_utf8_refs);
+  g_test_add_func ("/validate/invalid-utf8-refs", test_invalid_utf8_refs);
+  return g_test_run ();
+}

Reply via email to