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-11-01 22:21:42
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libostree (Old)
 and      /work/SRC/openSUSE:Factory/.libostree.new.1255 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libostree"

Sun Nov  1 22:21:42 2026 rev:58 rq:1394078 version:2026.6

Changes:
--------
--- /work/SRC/openSUSE:Factory/libostree/libostree.changes      2026-10-30 
18:12:34.403953256 +0100
+++ /work/SRC/openSUSE:Factory/.libostree.new.1255/libostree.changes    
2026-11-01 22:21:59.586453330 +0100
@@ -1,0 +2,13 @@
+Sat Oct 31 10:38:55 UTC 2026 - Andreas Stieger <[email protected]>
+
+- Update to version 2026.6:
+  * sign: Compare OpenSSL sign results against 1, test more spki cases
+  * core: Reject duplicate names in dirtree objects
+  * static-delta: Parse superblock files as untrusted
+  * prepare-root: Allow /run/ostree to exist already
+  * fetcher-uri: Keep https scheme when dropping default port
+  * rofiles-fuse: Check hardlinks for O_TRUNC opens and removexattr
+  * sign-spki: Pass GBytes when looking up revoked keys
+  * static-delta: Avoid mapping BSPATCH output on FUSE
+
+-------------------------------------------------------------------

Old:
----
  libostree-2026.5.tar.xz

New:
----
  libostree-2026.6.tar.xz

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

Other differences:
------------------
++++++ libostree.spec ++++++
--- /var/tmp/diff_new_pack.U1zJF8/_old  2026-11-01 22:22:00.503491331 +0100
+++ /var/tmp/diff_new_pack.U1zJF8/_new  2026-11-01 22:22:00.505491414 +0100
@@ -24,7 +24,7 @@
 %bcond_without     ed25519
 %bcond_with        tests
 Name:           libostree
-Version:        2026.5
+Version:        2026.6
 Release:        0
 Summary:        Git for operating system binaries
 License:        LGPL-2.0-or-later

++++++ _scmsync.obsinfo ++++++
--- /var/tmp/diff_new_pack.U1zJF8/_old  2026-11-01 22:22:00.538492781 +0100
+++ /var/tmp/diff_new_pack.U1zJF8/_new  2026-11-01 22:22:00.541492906 +0100
@@ -1,7 +1,7 @@
-mtime: 1792837151
-commit: 7c37e52ccbe92b1828aafd790a5b243cd58dff15eb58d4ca0ae63caf5609db3d
+mtime: 1793447325
+commit: f7991c2e6aab4faa2b4faf1a31444aa25fefc6521f46bbd596197d09e46c6ea4
 url: https://src.opensuse.org/GNOME/libostree
-revision: 7c37e52ccbe92b1828aafd790a5b243cd58dff15eb58d4ca0ae63caf5609db3d
+revision: f7991c2e6aab4faa2b4faf1a31444aa25fefc6521f46bbd596197d09e46c6ea4
 trackingbranch: factory
 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-10-31 12:48:45.000000000 +0100
@@ -0,0 +1,5 @@
+*.obscpio
+*.osc
+_build.*
+.pbuild
+osc-collab.*

++++++ libostree-2026.5.tar.xz -> libostree-2026.6.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.5/Makefile-tests.am 
new/libostree-2026.6/Makefile-tests.am
--- old/libostree-2026.5/Makefile-tests.am      2026-10-23 21:19:37.000000000 
+0200
+++ new/libostree-2026.6/Makefile-tests.am      2026-10-30 13:55:20.000000000 
+0100
@@ -311,6 +311,10 @@
 test_programs += tests/test-repo-finder-avahi
 endif
 
+if USE_CURL_OR_SOUP
+test_programs += tests/test-fetcher-uri
+endif
+
 # An interactive tool
 noinst_PROGRAMS += tests/test-rollsum-cli
 
@@ -341,6 +345,12 @@
 tests_test_bloom_CFLAGS = $(TESTS_CFLAGS)
 tests_test_bloom_LDADD = $(TESTS_LDADD)
 
+if USE_CURL_OR_SOUP
+tests_test_fetcher_uri_SOURCES = src/libostree/ostree-fetcher-uri.c 
tests/test-fetcher-uri.c
+tests_test_fetcher_uri_CFLAGS = $(TESTS_CFLAGS)
+tests_test_fetcher_uri_LDADD = $(TESTS_LDADD)
+endif
+
 tests_test_include_ostree_h_SOURCES = tests/test-include-ostree-h.c
 # Don't use TESTS_CFLAGS so we test if the public header can be included by 
external programs
 tests_test_include_ostree_h_CFLAGS = $(AM_CFLAGS) 
$(OT_INTERNAL_GIO_UNIX_CFLAGS) -I$(srcdir)/src/libostree 
-I$(builddir)/src/libostree
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.5/Makefile.in 
new/libostree-2026.6/Makefile.in
--- old/libostree-2026.5/Makefile.in    2026-10-23 22:12:49.000000000 +0200
+++ new/libostree-2026.6/Makefile.in    2026-10-30 15:34:21.000000000 +0100
@@ -375,13 +375,13 @@
 sbin_PROGRAMS =
 libexec_PROGRAMS =
 pkglibexec_PROGRAMS =
-noinst_PROGRAMS = $(am__EXEEXT_17) tests/test-rollsum-cli$(EXEEXT) \
+noinst_PROGRAMS = $(am__EXEEXT_18) tests/test-rollsum-cli$(EXEEXT) \
        tests/test-commit-sign-sh-ext$(EXEEXT)
-ostree_boot_PROGRAMS = $(am__EXEEXT_18) $(am__EXEEXT_19)
-TESTS = $(am__EXEEXT_8) $(am__EXEEXT_26) \
-       $(dist_uninstalled_test_scripts) $(am__EXEEXT_14)
-installed_test_PROGRAMS = $(am__EXEEXT_16)
-check_PROGRAMS = $(am__EXEEXT_13) $(am__EXEEXT_14) $(am__EXEEXT_15)
+ostree_boot_PROGRAMS = $(am__EXEEXT_19) $(am__EXEEXT_20)
+TESTS = $(am__EXEEXT_9) $(am__EXEEXT_27) \
+       $(dist_uninstalled_test_scripts) $(am__EXEEXT_15)
+installed_test_PROGRAMS = $(am__EXEEXT_17)
+check_PROGRAMS = $(am__EXEEXT_14) $(am__EXEEXT_15) $(am__EXEEXT_16)
 @ENABLE_ALWAYS_BUILD_TESTS_TRUE@am__append_1 = $(all_test_ltlibs)
 @ENABLE_ALWAYS_BUILD_TESTS_TRUE@am__append_2 = $(all_test_programs)
 @ENABLE_ALWAYS_BUILD_TESTS_TRUE@am__append_3 = $(all_test_scripts)
@@ -562,30 +562,31 @@
 
 @USE_LIBSOUP_OR_LIBSOUP3_TRUE@am__append_92 = ostree-trivial-httpd
 @USE_AVAHI_TRUE@am__append_93 = tests/test-repo-finder-avahi
-@USE_LIBARCHIVE_TRUE@am__append_94 = tests/test-libarchive-import
-@USE_GPGME_TRUE@am__append_95 = \
+@USE_CURL_OR_SOUP_TRUE@am__append_94 = tests/test-fetcher-uri
+@USE_LIBARCHIVE_TRUE@am__append_95 = tests/test-libarchive-import
+@USE_GPGME_TRUE@am__append_96 = \
 @USE_GPGME_TRUE@       tests/gpg-verify-data/README.md \
 @USE_GPGME_TRUE@       $(NULL)
 
-@ENABLE_INSTALLED_TESTS_EXCLUSIVE_FALSE@am__append_96 = 
$(_installed_or_uninstalled_test_scripts)
-@ENABLE_INSTALLED_TESTS_EXCLUSIVE_FALSE@am__append_97 = 
$(_installed_or_uninstalled_test_programs)
-@ENABLE_INSTALLED_TESTS_TRUE@am__append_98 = install-installed-tests-extra
+@ENABLE_INSTALLED_TESTS_EXCLUSIVE_FALSE@am__append_97 = 
$(_installed_or_uninstalled_test_scripts)
+@ENABLE_INSTALLED_TESTS_EXCLUSIVE_FALSE@am__append_98 = 
$(_installed_or_uninstalled_test_programs)
+@ENABLE_INSTALLED_TESTS_TRUE@am__append_99 = install-installed-tests-extra
 
 # Allow the distcheck install under $prefix test to pass
-@BUILDOPT_SYSTEMD_TRUE@am__append_99 = 
--with-systemdsystemunitdir='$${libdir}/systemd/system'
+@BUILDOPT_SYSTEMD_TRUE@am__append_100 = 
--with-systemdsystemunitdir='$${libdir}/systemd/system'
 
 # We're using the system grub2-mkconfig generator
-@BUILDOPT_BUILTIN_GRUB2_MKCONFIG_FALSE@am__append_100 = 
src/boot/grub2/grub2-15_ostree
-@BUILDOPT_BUILTIN_GRUB2_MKCONFIG_FALSE@am__append_101 = 
install-grub2-config-hook
+@BUILDOPT_BUILTIN_GRUB2_MKCONFIG_FALSE@am__append_101 = 
src/boot/grub2/grub2-15_ostree
+@BUILDOPT_BUILTIN_GRUB2_MKCONFIG_FALSE@am__append_102 = 
install-grub2-config-hook
 # We're using our internal generator
-@BUILDOPT_BUILTIN_GRUB2_MKCONFIG_TRUE@am__append_102 = 
src/boot/grub2/ostree-grub-generator
-@BUILDOPT_FUSE_TRUE@@ENABLE_MAN_TRUE@am__append_103 = rofiles-fuse.1
-@ENABLE_MAN_TRUE@@USE_GPGME_TRUE@am__append_104 = ostree-gpg-sign.1
-@ENABLE_MAN_HTML_TRUE@@ENABLE_MAN_TRUE@am__append_105 = $(manhtml_files)
-@ENABLE_MAN_TRUE@am__append_106 = man/index.xml $(man1_MANS:.1=.xml) \
+@BUILDOPT_BUILTIN_GRUB2_MKCONFIG_TRUE@am__append_103 = 
src/boot/grub2/ostree-grub-generator
+@BUILDOPT_FUSE_TRUE@@ENABLE_MAN_TRUE@am__append_104 = rofiles-fuse.1
+@ENABLE_MAN_TRUE@@USE_GPGME_TRUE@am__append_105 = ostree-gpg-sign.1
+@ENABLE_MAN_HTML_TRUE@@ENABLE_MAN_TRUE@am__append_106 = $(manhtml_files)
+@ENABLE_MAN_TRUE@am__append_107 = man/index.xml $(man1_MANS:.1=.xml) \
 @ENABLE_MAN_TRUE@      $(man5_MANS:.5=.xml) $(man8_MANS:.8=.xml) \
 @ENABLE_MAN_TRUE@      $(XSLT_HTML_STYLESHEET)
-@ENABLE_MAN_TRUE@am__append_107 = \
+@ENABLE_MAN_TRUE@am__append_108 = \
 @ENABLE_MAN_TRUE@      $(man1_MANS) \
 @ENABLE_MAN_TRUE@      $(man5_MANS) \
 @ENABLE_MAN_TRUE@      $(man8_MANS) \
@@ -648,11 +649,12 @@
        "$(DESTDIR)$(libostreeincludedir)"
 am__EXEEXT_2 =
 @USE_AVAHI_TRUE@am__EXEEXT_3 = tests/test-repo-finder-avahi$(EXEEXT)
-@USE_GPGME_TRUE@am__EXEEXT_4 = tests/test-gpg-verify-result$(EXEEXT) \
+@USE_CURL_OR_SOUP_TRUE@am__EXEEXT_4 = tests/test-fetcher-uri$(EXEEXT)
+@USE_GPGME_TRUE@am__EXEEXT_5 = tests/test-gpg-verify-result$(EXEEXT) \
 @USE_GPGME_TRUE@       $(am__EXEEXT_2)
-@USE_LIBARCHIVE_TRUE@am__EXEEXT_5 =  \
+@USE_LIBARCHIVE_TRUE@am__EXEEXT_6 =  \
 @USE_LIBARCHIVE_TRUE@  tests/test-libarchive-import$(EXEEXT)
-am__EXEEXT_6 = tests/test-varint$(EXEEXT) \
+am__EXEEXT_7 = tests/test-varint$(EXEEXT) \
        tests/test-ot-unix-utils$(EXEEXT) tests/test-bsdiff$(EXEEXT) \
        tests/test-otcore$(EXEEXT) tests/test-mutable-tree$(EXEEXT) \
        tests/test-keyfile-utils$(EXEEXT) \
@@ -664,31 +666,32 @@
        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) \
-       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) \
+       tests/test-validate-utf8$(EXEEXT) $(am__EXEEXT_5) \
+       $(am__EXEEXT_6)
+@ENABLE_INSTALLED_TESTS_EXCLUSIVE_FALSE@am__EXEEXT_8 =  \
+@ENABLE_INSTALLED_TESTS_EXCLUSIVE_FALSE@       $(am__EXEEXT_7)
+am__EXEEXT_9 = tests/test-bloom$(EXEEXT) \
        tests/test-repo-finder-config$(EXEEXT) \
        tests/test-repo-finder-mount$(EXEEXT) $(am__EXEEXT_2) \
-       $(am__EXEEXT_3) $(am__EXEEXT_7)
-@ENABLE_INSTALLED_TESTS_EXCLUSIVE_TRUE@am__EXEEXT_9 = $(am__EXEEXT_6)
-@USE_LIBSOUP_OR_LIBSOUP3_TRUE@am__EXEEXT_10 =  \
+       $(am__EXEEXT_3) $(am__EXEEXT_4) $(am__EXEEXT_8)
+@ENABLE_INSTALLED_TESTS_EXCLUSIVE_TRUE@am__EXEEXT_10 =  \
+@ENABLE_INSTALLED_TESTS_EXCLUSIVE_TRUE@        $(am__EXEEXT_7)
+@USE_LIBSOUP_OR_LIBSOUP3_TRUE@am__EXEEXT_11 =  \
 @USE_LIBSOUP_OR_LIBSOUP3_TRUE@ ostree-trivial-httpd$(EXEEXT)
-am__EXEEXT_11 = tests/get-byte-order$(EXEEXT) \
+am__EXEEXT_12 = tests/get-byte-order$(EXEEXT) \
        tests/repo-finder-mount$(EXEEXT) $(am__EXEEXT_2) \
-       $(am__EXEEXT_10)
-am__EXEEXT_12 = $(am__EXEEXT_8) $(am__EXEEXT_9) $(am__EXEEXT_11)
-@ENABLE_ALWAYS_BUILD_TESTS_FALSE@am__EXEEXT_13 = $(am__EXEEXT_12)
-am__EXEEXT_14 = test-libglnx-xattrs$(EXEEXT) \
+       $(am__EXEEXT_11)
+am__EXEEXT_13 = $(am__EXEEXT_9) $(am__EXEEXT_10) $(am__EXEEXT_12)
+@ENABLE_ALWAYS_BUILD_TESTS_FALSE@am__EXEEXT_14 = $(am__EXEEXT_13)
+am__EXEEXT_15 = test-libglnx-xattrs$(EXEEXT) \
        test-libglnx-fdio$(EXEEXT) test-libglnx-errors$(EXEEXT) \
        test-libglnx-macros$(EXEEXT) test-libglnx-shutil$(EXEEXT)
-@BUILDOPT_SYSTEMD_FALSE@am__EXEEXT_15 = ostree-remount$(EXEEXT)
-@ENABLE_INSTALLED_TESTS_TRUE@am__EXEEXT_16 = $(am__EXEEXT_8) \
-@ENABLE_INSTALLED_TESTS_TRUE@  $(am__EXEEXT_9) $(am__EXEEXT_11)
-@ENABLE_ALWAYS_BUILD_TESTS_TRUE@am__EXEEXT_17 = $(am__EXEEXT_12)
-@BUILDOPT_SYSTEMD_TRUE@am__EXEEXT_18 = ostree-remount$(EXEEXT)
-@BUILDOPT_USE_STATIC_COMPILER_FALSE@am__EXEEXT_19 = 
ostree-prepare-root$(EXEEXT)
+@BUILDOPT_SYSTEMD_FALSE@am__EXEEXT_16 = ostree-remount$(EXEEXT)
+@ENABLE_INSTALLED_TESTS_TRUE@am__EXEEXT_17 = $(am__EXEEXT_9) \
+@ENABLE_INSTALLED_TESTS_TRUE@  $(am__EXEEXT_10) $(am__EXEEXT_12)
+@ENABLE_ALWAYS_BUILD_TESTS_TRUE@am__EXEEXT_18 = $(am__EXEEXT_13)
+@BUILDOPT_SYSTEMD_TRUE@am__EXEEXT_19 = ostree-remount$(EXEEXT)
+@BUILDOPT_USE_STATIC_COMPILER_FALSE@am__EXEEXT_20 = 
ostree-prepare-root$(EXEEXT)
 PROGRAMS = $(bin_PROGRAMS) $(installed_test_PROGRAMS) \
        $(libexec_PROGRAMS) $(noinst_PROGRAMS) $(ostree_boot_PROGRAMS) \
        $(pkglibexec_PROGRAMS) $(sbin_PROGRAMS) \
@@ -1387,6 +1390,17 @@
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
        $(tests_test_commit_sign_sh_ext_CFLAGS) $(CFLAGS) \
        $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am__tests_test_fetcher_uri_SOURCES_DIST =  \
+       src/libostree/ostree-fetcher-uri.c tests/test-fetcher-uri.c
+@USE_CURL_OR_SOUP_TRUE@am_tests_test_fetcher_uri_OBJECTS = 
src/libostree/tests_test_fetcher_uri-ostree-fetcher-uri.$(OBJEXT) \
+@USE_CURL_OR_SOUP_TRUE@        
tests/test_fetcher_uri-test-fetcher-uri.$(OBJEXT)
+tests_test_fetcher_uri_OBJECTS = $(am_tests_test_fetcher_uri_OBJECTS)
+@USE_CURL_OR_SOUP_TRUE@tests_test_fetcher_uri_DEPENDENCIES =  \
+@USE_CURL_OR_SOUP_TRUE@        $(am__DEPENDENCIES_18)
+tests_test_fetcher_uri_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(tests_test_fetcher_uri_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
 am__tests_test_gpg_verify_result_SOURCES_DIST =  \
        src/libostree/ostree-gpg-verify-result-private.h \
        tests/test-gpg-verify-result.c
@@ -1721,6 +1735,7 @@
        src/libostree/$(DEPDIR)/tests_test_bloom-ostree-bloom.Po \
        src/libostree/$(DEPDIR)/tests_test_checksum-ostree-core.Po \
        src/libostree/$(DEPDIR)/tests_test_checksum-ostree-varint.Po \
+       src/libostree/$(DEPDIR)/tests_test_fetcher_uri-ostree-fetcher-uri.Po \
        src/libostree/$(DEPDIR)/tests_test_kargs-ostree-kernel-args.Po \
        src/libostree/$(DEPDIR)/tests_test_lzma-ostree-lzma-common.Po \
        src/libostree/$(DEPDIR)/tests_test_lzma-ostree-lzma-compressor.Po \
@@ -1836,6 +1851,7 @@
        tests/$(DEPDIR)/test_bsdiff-test-bsdiff.Po \
        tests/$(DEPDIR)/test_checksum-test-checksum.Po \
        tests/$(DEPDIR)/test_commit_sign_sh_ext-test-commit-sign-sh-ext.Po \
+       tests/$(DEPDIR)/test_fetcher_uri-test-fetcher-uri.Po \
        tests/$(DEPDIR)/test_gpg_verify_result-test-gpg-verify-result.Po \
        tests/$(DEPDIR)/test_include_ostree_h-test-include-ostree-h.Po \
        tests/$(DEPDIR)/test_kargs-test-kargs.Po \
@@ -1894,6 +1910,7 @@
        $(tests_test_bootconfig_parser_internals_SOURCES) \
        tests/test-bsdiff.c $(tests_test_checksum_SOURCES) \
        tests/test-commit-sign-sh-ext.c \
+       $(tests_test_fetcher_uri_SOURCES) \
        $(tests_test_gpg_verify_result_SOURCES) \
        $(tests_test_include_ostree_h_SOURCES) \
        $(tests_test_kargs_SOURCES) tests/test-keyfile-utils.c \
@@ -1927,6 +1944,7 @@
        $(tests_test_bootconfig_parser_internals_SOURCES) \
        tests/test-bsdiff.c $(tests_test_checksum_SOURCES) \
        tests/test-commit-sign-sh-ext.c \
+       $(am__tests_test_fetcher_uri_SOURCES_DIST) \
        $(am__tests_test_gpg_verify_result_SOURCES_DIST) \
        $(tests_test_include_ostree_h_SOURCES) \
        $(tests_test_kargs_SOURCES) tests/test-keyfile-utils.c \
@@ -2169,15 +2187,15 @@
   bases=`echo $$bases`
 AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
 RECHECK_LOGS = $(TEST_LOGS)
-am__EXEEXT_20 = tests/test-remote-gpg-import.sh \
+am__EXEEXT_21 = tests/test-remote-gpg-import.sh \
        tests/test-remote-gpg-list-keys.sh \
        tests/test-gpg-signed-commit.sh tests/test-admin-gpg.sh \
        $(am__EXEEXT_2)
-@USE_GPGME_TRUE@am__EXEEXT_21 = $(am__EXEEXT_20)
-am__EXEEXT_22 = tests/test-core.js tests/test-remotes-config-dir.js \
+@USE_GPGME_TRUE@am__EXEEXT_22 = $(am__EXEEXT_21)
+am__EXEEXT_23 = tests/test-core.js tests/test-remotes-config-dir.js \
        tests/test-sizes.js tests/test-sysroot.js $(am__EXEEXT_2)
-@BUILDOPT_GJS_TRUE@am__EXEEXT_23 = $(js_tests) $(am__EXEEXT_22)
-am__EXEEXT_24 = tests/test-basic.sh \
+@BUILDOPT_GJS_TRUE@am__EXEEXT_24 = $(js_tests) $(am__EXEEXT_23)
+am__EXEEXT_25 = tests/test-basic.sh \
        tests/test-basic-bare-split-xattrs.sh tests/test-basic-user.sh \
        tests/test-basic-user-only.sh tests/test-basic-root.sh \
        tests/test-cli-extensions.sh tests/test-pull-subpath.sh \
@@ -2242,11 +2260,11 @@
        tests/test-signed-commit-dummy.sh tests/test-signed-pull.sh \
        tests/test-pre-signed-pull.sh \
        tests/test-signed-pull-summary.sh $(am__EXEEXT_2) \
-       $(am__append_77) $(am__append_79) $(am__EXEEXT_21) \
-       $(am__append_83) $(am__append_86) $(am__EXEEXT_23)
-@ENABLE_INSTALLED_TESTS_EXCLUSIVE_FALSE@am__EXEEXT_25 =  \
-@ENABLE_INSTALLED_TESTS_EXCLUSIVE_FALSE@       $(am__EXEEXT_24)
-am__EXEEXT_26 = $(am__EXEEXT_2) $(am__EXEEXT_25)
+       $(am__append_77) $(am__append_79) $(am__EXEEXT_22) \
+       $(am__append_83) $(am__append_86) $(am__EXEEXT_24)
+@ENABLE_INSTALLED_TESTS_EXCLUSIVE_FALSE@am__EXEEXT_26 =  \
+@ENABLE_INSTALLED_TESTS_EXCLUSIVE_FALSE@       $(am__EXEEXT_25)
+am__EXEEXT_27 = $(am__EXEEXT_2) $(am__EXEEXT_26)
 TEST_SUITE_LOG = test-suite.log
 TEST_EXTENSIONS = @EXEEXT@ .test
 LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
@@ -2561,7 +2579,7 @@
 # Allow the distcheck install under $prefix test to pass
 AM_DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --enable-man \
        --disable-maintainer-mode $(NULL) $(am__append_74) \
-       $(am__append_99) \
+       $(am__append_100) \
        BASH_COMPLETIONSDIR='$${datadir}/bash-completion/completions'
 SUBDIRS = . $(am__append_15)
 NULL = 
@@ -2575,7 +2593,7 @@
        tests/ostree-remount-symlink-stamp \
        tests/rofiles-fuse-symlink-stamp tests/ostree \
        tests/ostree-prepare-root tests/ostree-remount \
-       tests/rofiles-fuse $(am__append_107)
+       tests/rofiles-fuse $(am__append_108)
 EXTRA_DIST = $(all_dist_test_scripts) $(all_dist_test_data) autogen.sh \
        COPYING README.md libglnx/README.md libglnx/COPYING \
        libglnx/LICENSES/LGPL-2.0-or-later.txt \
@@ -2595,7 +2613,7 @@
        tests/ostree.supp $(NULL) $(am__append_78) $(am__append_80) \
        $(am__append_82) $(am__append_85) $(am__append_87) \
        $(am__append_89) tests/libtest.sh $(am__append_90) \
-       $(am__append_95) tests/libostreetest.h tests/libtest.sh \
+       $(am__append_96) tests/libostreetest.h tests/libtest.sh \
        $(NULL) src/boot/dracut/module-setup.sh \
        src/boot/dracut/ostree.conf src/boot/mkinitcpio \
        src/boot/ostree-boot-complete.service \
@@ -2605,10 +2623,10 @@
        src/boot/ostree-finalize-staged-hold.service \
        src/boot/[email protected] \
        src/boot/grub2/grub2-15_ostree \
-       src/boot/grub2/ostree-grub-generator $(NULL) $(am__append_106)
+       src/boot/grub2/ostree-grub-generator $(NULL) $(am__append_107)
 bin_SCRIPTS = 
 lib_LTLIBRARIES = libostree-1.la
-pkglibexec_SCRIPTS = $(am__append_100)
+pkglibexec_SCRIPTS = $(am__append_101)
 noinst_LTLIBRARIES = $(am__append_1) libglnx.la libbsdiff.la \
        libotutil.la libotcore.la libbupsplit.la libostreetest.la
 privlibdir = $(pkglibdir)
@@ -2622,7 +2640,7 @@
 typelib_DATA = $(am__append_47)
 gsettings_SCHEMAS = 
 ostree_bootdir = $(prefix)/lib/ostree
-ostree_boot_SCRIPTS = $(am__append_59) $(am__append_102)
+ostree_boot_SCRIPTS = $(am__append_59) $(am__append_103)
 
 # We should probably consider flipping the default for DEBUG.  Also,
 # include the builddir in $PATH so we find our just-built ostree
@@ -2648,7 +2666,7 @@
 installed_test_DATA = $(am__append_11)
 nobase_installed_test_DATA = 
 noinst_SCRIPTS = $(am__append_3)
-noinst_DATA = $(am__append_4) $(am__append_105)
+noinst_DATA = $(am__append_4) $(am__append_106)
 check_LTLIBRARIES = $(am__append_5)
 check_SCRIPTS = $(am__append_7)
 check_DATA = $(am__append_8)
@@ -2680,8 +2698,8 @@
 # This initializes some more variables
 
 # This is a special facility to chain together hooks easily
-INSTALL_DATA_HOOKS = install-mkdir-remotes-d-hook $(am__append_98) \
-       $(am__append_101)
+INSTALL_DATA_HOOKS = install-mkdir-remotes-d-hook $(am__append_99) \
+       $(am__append_102)
 ALL_LOCAL_RULES = 
 shortened_sysconfdir = $$(echo "$(sysconfdir)" | sed -e 's|^$(prefix)||' -e 
's|^/||')
 OSTREE_GITREV = $(shell cd $(srcdir) && if command -v git >/dev/null 2>&1 && 
test -d .git; then git describe --abbrev=42 --tags --always HEAD; fi)
@@ -3116,10 +3134,10 @@
 # tests *only* run installed, to avoid having to run them twice in CI.
 # This overrides the glib-tap.mk emphasis on doing both, if we'd
 # used e.g. `dist_test_scripts`.
-dist_test_scripts = $(NULL) $(am__append_96)
+dist_test_scripts = $(NULL) $(am__append_97)
 test_programs = tests/test-bloom tests/test-repo-finder-config \
        tests/test-repo-finder-mount $(NULL) $(am__append_93) \
-       $(am__append_97)
+       $(am__append_94) $(am__append_98)
 _installed_or_uninstalled_test_scripts = tests/test-basic.sh \
        tests/test-basic-bare-split-xattrs.sh tests/test-basic-user.sh \
        tests/test-basic-user-only.sh tests/test-basic-root.sh \
@@ -3271,7 +3289,7 @@
        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-validate-utf8 $(am__append_91) $(am__append_94)
+       tests/test-validate-utf8 $(am__append_91) $(am__append_95)
 @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)
@@ -3291,6 +3309,9 @@
 tests_test_bloom_SOURCES = src/libostree/ostree-bloom.c tests/test-bloom.c
 tests_test_bloom_CFLAGS = $(TESTS_CFLAGS)
 tests_test_bloom_LDADD = $(TESTS_LDADD)
+@USE_CURL_OR_SOUP_TRUE@tests_test_fetcher_uri_SOURCES = 
src/libostree/ostree-fetcher-uri.c tests/test-fetcher-uri.c
+@USE_CURL_OR_SOUP_TRUE@tests_test_fetcher_uri_CFLAGS = $(TESTS_CFLAGS)
+@USE_CURL_OR_SOUP_TRUE@tests_test_fetcher_uri_LDADD = $(TESTS_LDADD)
 tests_test_include_ostree_h_SOURCES = tests/test-include-ostree-h.c
 # Don't use TESTS_CFLAGS so we test if the public header can be included by 
external programs
 tests_test_include_ostree_h_CFLAGS = $(AM_CFLAGS) 
$(OT_INTERNAL_GIO_UNIX_CFLAGS) -I$(srcdir)/src/libostree 
-I$(builddir)/src/libostree
@@ -3431,7 +3452,7 @@
 @ENABLE_MAN_TRUE@      ostree-reset.1 ostree-rev-parse.1 \
 @ENABLE_MAN_TRUE@      ostree-show.1 ostree-sign.1 ostree-summary.1 \
 @ENABLE_MAN_TRUE@      ostree-static-delta.1 ostree-prepare-root.1 \
-@ENABLE_MAN_TRUE@      $(am__append_103) $(am__append_104)
+@ENABLE_MAN_TRUE@      $(am__append_104) $(am__append_105)
 @ENABLE_MAN_TRUE@man5_files = ostree.repo.5 ostree.repo-config.5
 @ENABLE_MAN_TRUE@man8_files = [email protected]
 @ENABLE_MAN_TRUE@man1_MANS = $(addprefix man/,$(man1_files))
@@ -4754,6 +4775,15 @@
 tests/test-commit-sign-sh-ext$(EXEEXT): 
$(tests_test_commit_sign_sh_ext_OBJECTS) 
$(tests_test_commit_sign_sh_ext_DEPENDENCIES) 
$(EXTRA_tests_test_commit_sign_sh_ext_DEPENDENCIES) tests/$(am__dirstamp)
        @rm -f tests/test-commit-sign-sh-ext$(EXEEXT)
        $(AM_V_CCLD)$(tests_test_commit_sign_sh_ext_LINK) 
$(tests_test_commit_sign_sh_ext_OBJECTS) $(tests_test_commit_sign_sh_ext_LDADD) 
$(LIBS)
+src/libostree/tests_test_fetcher_uri-ostree-fetcher-uri.$(OBJEXT):  \
+       src/libostree/$(am__dirstamp) \
+       src/libostree/$(DEPDIR)/$(am__dirstamp)
+tests/test_fetcher_uri-test-fetcher-uri.$(OBJEXT):  \
+       tests/$(am__dirstamp) tests/$(DEPDIR)/$(am__dirstamp)
+
+tests/test-fetcher-uri$(EXEEXT): $(tests_test_fetcher_uri_OBJECTS) 
$(tests_test_fetcher_uri_DEPENDENCIES) 
$(EXTRA_tests_test_fetcher_uri_DEPENDENCIES) tests/$(am__dirstamp)
+       @rm -f tests/test-fetcher-uri$(EXEEXT)
+       $(AM_V_CCLD)$(tests_test_fetcher_uri_LINK) 
$(tests_test_fetcher_uri_OBJECTS) $(tests_test_fetcher_uri_LDADD) $(LIBS)
 tests/test_gpg_verify_result-test-gpg-verify-result.$(OBJEXT):  \
        tests/$(am__dirstamp) tests/$(DEPDIR)/$(am__dirstamp)
 
@@ -5269,6 +5299,7 @@
 @AMDEP_TRUE@@am__include@ 
@am__quote@src/libostree/$(DEPDIR)/tests_test_bloom-ostree-bloom.Po@am__quote@ 
# am--include-marker
 @AMDEP_TRUE@@am__include@ 
@am__quote@src/libostree/$(DEPDIR)/tests_test_checksum-ostree-core.Po@am__quote@
 # am--include-marker
 @AMDEP_TRUE@@am__include@ 
@am__quote@src/libostree/$(DEPDIR)/tests_test_checksum-ostree-varint.Po@am__quote@
 # am--include-marker
+@AMDEP_TRUE@@am__include@ 
@am__quote@src/libostree/$(DEPDIR)/tests_test_fetcher_uri-ostree-fetcher-uri.Po@am__quote@
 # am--include-marker
 @AMDEP_TRUE@@am__include@ 
@am__quote@src/libostree/$(DEPDIR)/tests_test_kargs-ostree-kernel-args.Po@am__quote@
 # am--include-marker
 @AMDEP_TRUE@@am__include@ 
@am__quote@src/libostree/$(DEPDIR)/tests_test_lzma-ostree-lzma-common.Po@am__quote@
 # am--include-marker
 @AMDEP_TRUE@@am__include@ 
@am__quote@src/libostree/$(DEPDIR)/tests_test_lzma-ostree-lzma-compressor.Po@am__quote@
 # am--include-marker
@@ -5384,6 +5415,7 @@
 @AMDEP_TRUE@@am__include@ 
@am__quote@tests/$(DEPDIR)/test_bsdiff-test-bsdiff.Po@am__quote@ # 
am--include-marker
 @AMDEP_TRUE@@am__include@ 
@am__quote@tests/$(DEPDIR)/test_checksum-test-checksum.Po@am__quote@ # 
am--include-marker
 @AMDEP_TRUE@@am__include@ 
@am__quote@tests/$(DEPDIR)/test_commit_sign_sh_ext-test-commit-sign-sh-ext.Po@am__quote@
 # am--include-marker
+@AMDEP_TRUE@@am__include@ 
@am__quote@tests/$(DEPDIR)/test_fetcher_uri-test-fetcher-uri.Po@am__quote@ # 
am--include-marker
 @AMDEP_TRUE@@am__include@ 
@am__quote@tests/$(DEPDIR)/test_gpg_verify_result-test-gpg-verify-result.Po@am__quote@
 # am--include-marker
 @AMDEP_TRUE@@am__include@ 
@am__quote@tests/$(DEPDIR)/test_include_ostree_h-test-include-ostree-h.Po@am__quote@
 # am--include-marker
 @AMDEP_TRUE@@am__include@ 
@am__quote@tests/$(DEPDIR)/test_kargs-test-kargs.Po@am__quote@ # 
am--include-marker
@@ -7559,6 +7591,34 @@
 @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_commit_sign_sh_ext_CFLAGS) 
$(CFLAGS) -c -o tests/test_commit_sign_sh_ext-test-commit-sign-sh-ext.obj `if 
test -f 'tests/test-commit-sign-sh-ext.c'; then $(CYGPATH_W) 
'tests/test-commit-sign-sh-ext.c'; else $(CYGPATH_W) 
'$(srcdir)/tests/test-commit-sign-sh-ext.c'; fi`
 
+src/libostree/tests_test_fetcher_uri-ostree-fetcher-uri.o: 
src/libostree/ostree-fetcher-uri.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) 
$(AM_CPPFLAGS) $(CPPFLAGS) $(tests_test_fetcher_uri_CFLAGS) $(CFLAGS) -MT 
src/libostree/tests_test_fetcher_uri-ostree-fetcher-uri.o -MD -MP -MF 
src/libostree/$(DEPDIR)/tests_test_fetcher_uri-ostree-fetcher-uri.Tpo -c -o 
src/libostree/tests_test_fetcher_uri-ostree-fetcher-uri.o `test -f 
'src/libostree/ostree-fetcher-uri.c' || echo 
'$(srcdir)/'`src/libostree/ostree-fetcher-uri.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) 
src/libostree/$(DEPDIR)/tests_test_fetcher_uri-ostree-fetcher-uri.Tpo 
src/libostree/$(DEPDIR)/tests_test_fetcher_uri-ostree-fetcher-uri.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      
$(AM_V_CC)source='src/libostree/ostree-fetcher-uri.c' 
object='src/libostree/tests_test_fetcher_uri-ostree-fetcher-uri.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_fetcher_uri_CFLAGS) 
$(CFLAGS) -c -o src/libostree/tests_test_fetcher_uri-ostree-fetcher-uri.o `test 
-f 'src/libostree/ostree-fetcher-uri.c' || echo 
'$(srcdir)/'`src/libostree/ostree-fetcher-uri.c
+
+src/libostree/tests_test_fetcher_uri-ostree-fetcher-uri.obj: 
src/libostree/ostree-fetcher-uri.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) 
$(AM_CPPFLAGS) $(CPPFLAGS) $(tests_test_fetcher_uri_CFLAGS) $(CFLAGS) -MT 
src/libostree/tests_test_fetcher_uri-ostree-fetcher-uri.obj -MD -MP -MF 
src/libostree/$(DEPDIR)/tests_test_fetcher_uri-ostree-fetcher-uri.Tpo -c -o 
src/libostree/tests_test_fetcher_uri-ostree-fetcher-uri.obj `if test -f 
'src/libostree/ostree-fetcher-uri.c'; then $(CYGPATH_W) 
'src/libostree/ostree-fetcher-uri.c'; else $(CYGPATH_W) 
'$(srcdir)/src/libostree/ostree-fetcher-uri.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) 
src/libostree/$(DEPDIR)/tests_test_fetcher_uri-ostree-fetcher-uri.Tpo 
src/libostree/$(DEPDIR)/tests_test_fetcher_uri-ostree-fetcher-uri.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      
$(AM_V_CC)source='src/libostree/ostree-fetcher-uri.c' 
object='src/libostree/tests_test_fetcher_uri-ostree-fetcher-uri.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_fetcher_uri_CFLAGS) 
$(CFLAGS) -c -o src/libostree/tests_test_fetcher_uri-ostree-fetcher-uri.obj `if 
test -f 'src/libostree/ostree-fetcher-uri.c'; then $(CYGPATH_W) 
'src/libostree/ostree-fetcher-uri.c'; else $(CYGPATH_W) 
'$(srcdir)/src/libostree/ostree-fetcher-uri.c'; fi`
+
+tests/test_fetcher_uri-test-fetcher-uri.o: tests/test-fetcher-uri.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) 
$(AM_CPPFLAGS) $(CPPFLAGS) $(tests_test_fetcher_uri_CFLAGS) $(CFLAGS) -MT 
tests/test_fetcher_uri-test-fetcher-uri.o -MD -MP -MF 
tests/$(DEPDIR)/test_fetcher_uri-test-fetcher-uri.Tpo -c -o 
tests/test_fetcher_uri-test-fetcher-uri.o `test -f 'tests/test-fetcher-uri.c' 
|| echo '$(srcdir)/'`tests/test-fetcher-uri.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) 
tests/$(DEPDIR)/test_fetcher_uri-test-fetcher-uri.Tpo 
tests/$(DEPDIR)/test_fetcher_uri-test-fetcher-uri.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      
$(AM_V_CC)source='tests/test-fetcher-uri.c' 
object='tests/test_fetcher_uri-test-fetcher-uri.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_fetcher_uri_CFLAGS) 
$(CFLAGS) -c -o tests/test_fetcher_uri-test-fetcher-uri.o `test -f 
'tests/test-fetcher-uri.c' || echo '$(srcdir)/'`tests/test-fetcher-uri.c
+
+tests/test_fetcher_uri-test-fetcher-uri.obj: tests/test-fetcher-uri.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) 
$(AM_CPPFLAGS) $(CPPFLAGS) $(tests_test_fetcher_uri_CFLAGS) $(CFLAGS) -MT 
tests/test_fetcher_uri-test-fetcher-uri.obj -MD -MP -MF 
tests/$(DEPDIR)/test_fetcher_uri-test-fetcher-uri.Tpo -c -o 
tests/test_fetcher_uri-test-fetcher-uri.obj `if test -f 
'tests/test-fetcher-uri.c'; then $(CYGPATH_W) 'tests/test-fetcher-uri.c'; else 
$(CYGPATH_W) '$(srcdir)/tests/test-fetcher-uri.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) 
tests/$(DEPDIR)/test_fetcher_uri-test-fetcher-uri.Tpo 
tests/$(DEPDIR)/test_fetcher_uri-test-fetcher-uri.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      
$(AM_V_CC)source='tests/test-fetcher-uri.c' 
object='tests/test_fetcher_uri-test-fetcher-uri.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_fetcher_uri_CFLAGS) 
$(CFLAGS) -c -o tests/test_fetcher_uri-test-fetcher-uri.obj `if test -f 
'tests/test-fetcher-uri.c'; then $(CYGPATH_W) 'tests/test-fetcher-uri.c'; else 
$(CYGPATH_W) '$(srcdir)/tests/test-fetcher-uri.c'; fi`
+
 tests/test_gpg_verify_result-test-gpg-verify-result.o: 
tests/test-gpg-verify-result.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) 
$(AM_CPPFLAGS) $(CPPFLAGS) $(tests_test_gpg_verify_result_CFLAGS) $(CFLAGS) -MT 
tests/test_gpg_verify_result-test-gpg-verify-result.o -MD -MP -MF 
tests/$(DEPDIR)/test_gpg_verify_result-test-gpg-verify-result.Tpo -c -o 
tests/test_gpg_verify_result-test-gpg-verify-result.o `test -f 
'tests/test-gpg-verify-result.c' || echo 
'$(srcdir)/'`tests/test-gpg-verify-result.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) 
tests/$(DEPDIR)/test_gpg_verify_result-test-gpg-verify-result.Tpo 
tests/$(DEPDIR)/test_gpg_verify_result-test-gpg-verify-result.Po
@@ -8836,6 +8896,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-fetcher-uri.log: tests/test-fetcher-uri$(EXEEXT)
+       @p='tests/test-fetcher-uri$(EXEEXT)'; \
+       b='tests/test-fetcher-uri'; \
+       $(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-varint.log: tests/test-varint$(EXEEXT)
        @p='tests/test-varint$(EXEEXT)'; \
        b='tests/test-varint'; \
@@ -10271,6 +10338,7 @@
        -rm -f src/libostree/$(DEPDIR)/tests_test_bloom-ostree-bloom.Po
        -rm -f src/libostree/$(DEPDIR)/tests_test_checksum-ostree-core.Po
        -rm -f src/libostree/$(DEPDIR)/tests_test_checksum-ostree-varint.Po
+       -rm -f 
src/libostree/$(DEPDIR)/tests_test_fetcher_uri-ostree-fetcher-uri.Po
        -rm -f src/libostree/$(DEPDIR)/tests_test_kargs-ostree-kernel-args.Po
        -rm -f src/libostree/$(DEPDIR)/tests_test_lzma-ostree-lzma-common.Po
        -rm -f src/libostree/$(DEPDIR)/tests_test_lzma-ostree-lzma-compressor.Po
@@ -10386,6 +10454,7 @@
        -rm -f tests/$(DEPDIR)/test_bsdiff-test-bsdiff.Po
        -rm -f tests/$(DEPDIR)/test_checksum-test-checksum.Po
        -rm -f 
tests/$(DEPDIR)/test_commit_sign_sh_ext-test-commit-sign-sh-ext.Po
+       -rm -f tests/$(DEPDIR)/test_fetcher_uri-test-fetcher-uri.Po
        -rm -f tests/$(DEPDIR)/test_gpg_verify_result-test-gpg-verify-result.Po
        -rm -f tests/$(DEPDIR)/test_include_ostree_h-test-include-ostree-h.Po
        -rm -f tests/$(DEPDIR)/test_kargs-test-kargs.Po
@@ -10581,6 +10650,7 @@
        -rm -f src/libostree/$(DEPDIR)/tests_test_bloom-ostree-bloom.Po
        -rm -f src/libostree/$(DEPDIR)/tests_test_checksum-ostree-core.Po
        -rm -f src/libostree/$(DEPDIR)/tests_test_checksum-ostree-varint.Po
+       -rm -f 
src/libostree/$(DEPDIR)/tests_test_fetcher_uri-ostree-fetcher-uri.Po
        -rm -f src/libostree/$(DEPDIR)/tests_test_kargs-ostree-kernel-args.Po
        -rm -f src/libostree/$(DEPDIR)/tests_test_lzma-ostree-lzma-common.Po
        -rm -f src/libostree/$(DEPDIR)/tests_test_lzma-ostree-lzma-compressor.Po
@@ -10696,6 +10766,7 @@
        -rm -f tests/$(DEPDIR)/test_bsdiff-test-bsdiff.Po
        -rm -f tests/$(DEPDIR)/test_checksum-test-checksum.Po
        -rm -f 
tests/$(DEPDIR)/test_commit_sign_sh_ext-test-commit-sign-sh-ext.Po
+       -rm -f tests/$(DEPDIR)/test_fetcher_uri-test-fetcher-uri.Po
        -rm -f tests/$(DEPDIR)/test_gpg_verify_result-test-gpg-verify-result.Po
        -rm -f tests/$(DEPDIR)/test_include_ostree_h-test-include-ostree-h.Po
        -rm -f tests/$(DEPDIR)/test_kargs-test-kargs.Po
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libostree-2026.5/apidoc/html/ostree-ostree-version.html 
new/libostree-2026.6/apidoc/html/ostree-ostree-version.html
--- old/libostree-2026.5/apidoc/html/ostree-ostree-version.html 2026-10-23 
22:15:21.000000000 +0200
+++ new/libostree-2026.6/apidoc/html/ostree-ostree-version.html 2026-10-30 
15:50:44.000000000 +0100
@@ -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 (5)
+<pre class="programlisting">#define OSTREE_RELEASE_VERSION (6)
 </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.5)
+<pre class="programlisting">#define OSTREE_VERSION (2026.6)
 </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.5"
+<pre class="programlisting">#define OSTREE_VERSION_S "2026.6"
 </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.5/configure 
new/libostree-2026.6/configure
--- old/libostree-2026.5/configure      2026-10-23 22:12:48.000000000 +0200
+++ new/libostree-2026.6/configure      2026-10-30 15:34:21.000000000 +0100
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for libostree 2026.5.
+# Generated by GNU Autoconf 2.71 for libostree 2026.6.
 #
 # Report bugs to <[email protected]>.
 #
@@ -621,8 +621,8 @@
 # Identity of this package.
 PACKAGE_NAME='libostree'
 PACKAGE_TARNAME='libostree'
-PACKAGE_VERSION='2026.5'
-PACKAGE_STRING='libostree 2026.5'
+PACKAGE_VERSION='2026.6'
+PACKAGE_STRING='libostree 2026.6'
 PACKAGE_BUGREPORT='[email protected]'
 PACKAGE_URL=''
 
@@ -1623,7 +1623,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.5 to adapt to many kinds of systems.
+\`configure' configures libostree 2026.6 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1694,7 +1694,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of libostree 2026.5:";;
+     short | recursive ) echo "Configuration of libostree 2026.6:";;
    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.5
+libostree configure 2026.6
 generated by GNU Autoconf 2.71
 
 Copyright (C) 2021 Free Software Foundation, Inc.
@@ -2338,7 +2338,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.5, which was
+It was created by libostree $as_me 2026.6, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -3615,7 +3615,7 @@
 
 # Define the identity of the package.
  PACKAGE='libostree'
- VERSION='2026.5'
+ VERSION='2026.6'
 
 
 # Some tools Automake needs.
@@ -6493,9 +6493,9 @@
 
 YEAR_VERSION=2026
 
-RELEASE_VERSION=5
+RELEASE_VERSION=6
 
-PACKAGE_VERSION=2026.5
+PACKAGE_VERSION=2026.6
 
 
 pkglibexecdir=$libexecdir/$PACKAGE
@@ -20981,7 +20981,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.5, which was
+This file was extended by libostree $as_me 2026.6, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -21049,7 +21049,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-libostree config.status 2026.5
+libostree config.status 2026.6
 configured by $0, generated by GNU Autoconf 2.71,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.5/configure.ac 
new/libostree-2026.6/configure.ac
--- old/libostree-2026.5/configure.ac   2026-10-23 21:19:42.000000000 +0200
+++ new/libostree-2026.6/configure.ac   2026-10-30 15:34:18.000000000 +0100
@@ -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], [5])
+m4_define([release_version], [6])
 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.5/src/libostree/ostree-core.c 
new/libostree-2026.6/src/libostree/ostree-core.c
--- old/libostree-2026.5/src/libostree/ostree-core.c    2026-10-23 
21:19:37.000000000 +0200
+++ new/libostree-2026.6/src/libostree/ostree-core.c    2026-10-30 
13:55:20.000000000 +0100
@@ -2244,6 +2244,10 @@
   g_autoptr (GVariant) content_csum_v = NULL;
   g_autoptr (GVariant) meta_csum_v = NULL;
   g_autoptr (GVariantIter) contents_iter = NULL;
+  /* A name must not appear twice, in particular not as both a file and a
+   * subdirectory: checkout would create the file (possibly a symlink) and
+   * then open it as the subdirectory. */
+  g_autoptr (GHashTable) names = g_hash_table_new (g_str_hash, g_str_equal);
 
   if (!validate_variant (dirtree, OSTREE_TREE_GVARIANT_FORMAT, error))
     return FALSE;
@@ -2254,6 +2258,8 @@
     {
       if (!ot_util_filename_validate (filename, error))
         return FALSE;
+      if (!g_hash_table_add (names, (char *)filename))
+        return glnx_throw (error, "Duplicate name in dirtree: %s", filename);
       if (!ostree_validate_structureof_csum_v (content_csum_v, error))
         return FALSE;
     }
@@ -2270,6 +2276,8 @@
     {
       if (!ot_util_filename_validate (filename, error))
         return FALSE;
+      if (!g_hash_table_add (names, (char *)filename))
+        return glnx_throw (error, "Duplicate name in dirtree: %s", filename);
       if (!ostree_validate_structureof_csum_v (content_csum_v, error))
         return FALSE;
       if (!ostree_validate_structureof_csum_v (meta_csum_v, error))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.5/src/libostree/ostree-fetcher-uri.c 
new/libostree-2026.6/src/libostree/ostree-fetcher-uri.c
--- old/libostree-2026.5/src/libostree/ostree-fetcher-uri.c     2025-06-30 
15:15:07.000000000 +0200
+++ new/libostree-2026.6/src/libostree/ostree-fetcher-uri.c     2026-10-30 
13:55:20.000000000 +0100
@@ -65,10 +65,10 @@
         default:
           return (OstreeFetcherURI *)uri;
         }
-      nuri = g_uri_build_with_user (g_uri_get_flags (uri), "http", 
g_uri_get_user (uri),
-                                    g_uri_get_password (uri), NULL, 
g_uri_get_host (uri), -1,
-                                    g_uri_get_path (uri), g_uri_get_query 
(uri),
-                                    g_uri_get_fragment (uri));
+      nuri = g_uri_build_with_user (g_uri_get_flags (uri), g_uri_get_scheme 
(uri),
+                                    g_uri_get_user (uri), g_uri_get_password 
(uri), NULL,
+                                    g_uri_get_host (uri), -1, g_uri_get_path 
(uri),
+                                    g_uri_get_query (uri), g_uri_get_fragment 
(uri));
       g_uri_unref (uri);
       uri = nuri;
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.5/src/libostree/ostree-repo-private.h 
new/libostree-2026.6/src/libostree/ostree-repo-private.h
--- old/libostree-2026.5/src/libostree/ostree-repo-private.h    2026-10-23 
21:19:37.000000000 +0200
+++ new/libostree-2026.6/src/libostree/ostree-repo-private.h    2026-10-30 
13:55:20.000000000 +0100
@@ -75,6 +75,9 @@
 {
   OSTREE_REPO_TEST_ERROR_PRE_COMMIT = (1 << 0),
   OSTREE_REPO_TEST_ERROR_INVALID_CACHE = (1 << 1),
+  /* Disable mmap only for static-delta BSPATCH output. Its source remains a
+   * read-only mapping, since bspatch() needs random access to it. */
+  OSTREE_REPO_TEST_ERROR_DISABLE_MMAP = (1 << 2),
 } OstreeRepoTestErrorFlags;
 
 struct OstreeRepoCommitModifier
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libostree-2026.5/src/libostree/ostree-repo-static-delta-core.c 
new/libostree-2026.6/src/libostree/ostree-repo-static-delta-core.c
--- old/libostree-2026.5/src/libostree/ostree-repo-static-delta-core.c  
2026-10-23 21:19:37.000000000 +0200
+++ new/libostree-2026.6/src/libostree/ostree-repo-static-delta-core.c  
2026-10-30 13:55:20.000000000 +0100
@@ -381,7 +381,7 @@
   if (out_value)
     *out_value = NULL;
 
-  if (!ot_variant_read_fd (fd, 0, (GVariantType 
*)OSTREE_STATIC_DELTA_SIGNED_FORMAT, TRUE, &delta,
+  if (!ot_variant_read_fd (fd, 0, (GVariantType 
*)OSTREE_STATIC_DELTA_SIGNED_FORMAT, FALSE, &delta,
                            error))
     return FALSE;
 
@@ -414,10 +414,13 @@
       g_variant_unref (item);
     }
 
-  if (out_value && ret)
+  if (!ret)
+    return glnx_throw (error, "no signatures in static-delta");
+
+  if (out_value)
     ot_transfer_out_value (out_value, &signatures);
 
-  return ret;
+  return TRUE;
 }
 
 static gboolean
@@ -426,7 +429,7 @@
 {
   g_autoptr (GVariant) delta = NULL;
 
-  if (!ot_variant_read_fd (fd, 0, (GVariantType 
*)OSTREE_STATIC_DELTA_SIGNED_FORMAT, TRUE, &delta,
+  if (!ot_variant_read_fd (fd, 0, (GVariantType 
*)OSTREE_STATIC_DELTA_SIGNED_FORMAT, FALSE, &delta,
                            error))
     return FALSE;
 
@@ -533,7 +536,7 @@
         }
 
       g_autoptr (GVariant) delta = NULL;
-      if (!ot_variant_read_fd (meta_fd, 0, (GVariantType 
*)OSTREE_STATIC_DELTA_SIGNED_FORMAT, TRUE,
+      if (!ot_variant_read_fd (meta_fd, 0, (GVariantType 
*)OSTREE_STATIC_DELTA_SIGNED_FORMAT, FALSE,
                                &delta, error))
         return FALSE;
 
@@ -745,6 +748,8 @@
     /* First byte is compression type */
     if (!g_input_stream_read_all (source_in, buf, sizeof (buf), &bytes_read, 
cancellable, error))
       return glnx_prefix_error (error, "Reading initial compression flag 
byte");
+    if (bytes_read != sizeof (buf))
+      return glnx_throw (error, "Empty static delta part");
     comptype = buf[0];
   }
 
@@ -1051,7 +1056,7 @@
   if (is_signed)
     {
       if (!ot_variant_read_fd (superblock_fd, 0, (GVariantType 
*)OSTREE_STATIC_DELTA_SIGNED_FORMAT,
-                               TRUE, &delta, error))
+                               FALSE, &delta, error))
         return FALSE;
 
       g_autoptr (GVariant) child = g_variant_get_child_value (delta, 1);
@@ -1062,7 +1067,7 @@
   else
     {
       if (!ot_variant_read_fd (superblock_fd, 0,
-                               (GVariantType 
*)OSTREE_STATIC_DELTA_SUPERBLOCK_FORMAT, TRUE,
+                               (GVariantType 
*)OSTREE_STATIC_DELTA_SUPERBLOCK_FORMAT, FALSE,
                                &delta_superblock, error))
         return FALSE;
     }
@@ -1149,7 +1154,10 @@
       g_autoptr (GVariant) checksum_v = NULL;
       char checksum[OSTREE_SHA256_STRING_LEN + 1];
       g_variant_get_child (fallback, i, "(y@aytt)", NULL, &checksum_v, &size, 
&usize);
-      ostree_checksum_inplace_from_bytes (ostree_checksum_bytes_peek 
(checksum_v), checksum);
+      const guchar *csum = ostree_checksum_bytes_peek_validate (checksum_v, 
error);
+      if (!csum)
+        return FALSE;
+      ostree_checksum_inplace_from_bytes (csum, checksum);
       size = maybe_swap_endian_u64 (swap_endian, size);
       usize = maybe_swap_endian_u64 (swap_endian, usize);
       g_print ("  %s\n", checksum);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libostree-2026.5/src/libostree/ostree-repo-static-delta-processing.c 
new/libostree-2026.6/src/libostree/ostree-repo-static-delta-processing.c
--- old/libostree-2026.5/src/libostree/ostree-repo-static-delta-processing.c    
2026-10-23 21:19:37.000000000 +0200
+++ new/libostree-2026.6/src/libostree/ostree-repo-static-delta-processing.c    
2026-10-30 13:55:20.000000000 +0100
@@ -408,7 +408,6 @@
                   GError **error)
 {
   guint64 offset, length;
-  (void)repo;
 
   if (!read_varuint64 (state, &offset, error))
     return FALSE;
@@ -427,9 +426,9 @@
       if (!input_mfile)
         return FALSE;
 
-      /* Guard against integer truncation on 32-bit systems: mmap() takes gsize
-       * while bspatch() uses int64_t. Without this check the mapped region and
-       * the size used by bspatch() could differ.
+      /* Guard against integer truncation on 32-bit systems: allocation and
+       * mapping sizes use gsize while bspatch() uses int64_t. Without this 
check
+       * the output buffer and the size used by bspatch() could differ.
        * (CVE / RHEL-189207, CWE-680, CWE-122)
        */
       if (G_UNLIKELY (state->content_size > G_MAXSIZE || state->content_size > 
(guint64)G_MAXINT64))
@@ -442,8 +441,28 @@
         }
 
       guint8 *buf;
-      size_t buflen;
-      if (!_ostree_repo_bare_content_map (&state->content_out, &buf, &buflen, 
cancellable, error))
+      size_t buflen = (size_t)state->content_size;
+      g_autofree guint8 *heap_buf = NULL;
+      const gboolean heap_output
+          = repo->is_on_fuse || (repo->test_error_flags & 
OSTREE_REPO_TEST_ERROR_DISABLE_MMAP) != 0;
+
+      /* revokefs enables FUSE direct I/O for writable files. The kernel does
+       * not allow MAP_SHARED mappings of those files. The test-only
+       * disable-mmap flag exercises this output path; the BSPATCH source is
+       * still read through its read-only mapping above.
+       */
+      if (heap_output)
+        {
+          heap_buf = g_try_malloc (MAX (buflen, (size_t)1));
+          if (!heap_buf)
+            return glnx_throw (error,
+                               "Unable to allocate %" G_GSIZE_FORMAT
+                               " bytes for static delta bspatch output",
+                               buflen);
+          buf = heap_buf;
+        }
+      else if (!_ostree_repo_bare_content_map (&state->content_out, &buf, 
&buflen, cancellable,
+                                               error))
         return FALSE;
 
       struct bzpatch_opaque_s opaque;
@@ -458,7 +477,13 @@
           < 0)
         return glnx_throw (error, "bsdiff patch failed");
 
-      if (!_ostree_repo_bare_content_finish_mapped (&state->content_out, 
cancellable, error))
+      if (heap_output)
+        {
+          if (!_ostree_repo_bare_content_write (repo, &state->content_out, 
buf, buflen, cancellable,
+                                                error))
+            return FALSE;
+        }
+      else if (!_ostree_repo_bare_content_finish_mapped (&state->content_out, 
cancellable, error))
         return FALSE;
     }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.5/src/libostree/ostree-repo.c 
new/libostree-2026.6/src/libostree/ostree-repo.c
--- old/libostree-2026.5/src/libostree/ostree-repo.c    2026-10-23 
21:19:37.000000000 +0200
+++ new/libostree-2026.6/src/libostree/ostree-repo.c    2026-10-30 
13:55:20.000000000 +0100
@@ -1304,6 +1304,7 @@
   const GDebugKey test_error_keys[] = {
     { "pre-commit", OSTREE_REPO_TEST_ERROR_PRE_COMMIT },
     { "invalid-cache", OSTREE_REPO_TEST_ERROR_INVALID_CACHE },
+    { "disable-mmap", OSTREE_REPO_TEST_ERROR_DISABLE_MMAP },
   };
 
 #ifndef OSTREE_DISABLE_GPGME
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.5/src/libostree/ostree-sign-ed25519.c 
new/libostree-2026.6/src/libostree/ostree-sign-ed25519.c
--- old/libostree-2026.5/src/libostree/ostree-sign-ed25519.c    2026-10-23 
21:19:37.000000000 +0200
+++ new/libostree-2026.6/src/libostree/ostree-sign-ed25519.c    2026-10-30 
13:55:20.000000000 +0100
@@ -156,9 +156,11 @@
       return glnx_throw (error, "openssl: Failed to initialize ed25519 key");
     }
 
-  size_t len;
-  if (EVP_DigestSignInit (ctx, NULL, NULL, NULL, pkey)
-      && EVP_DigestSign (ctx, sig, &len, g_bytes_get_data (data, NULL), 
g_bytes_get_size (data)))
+  /* Both calls return 1 on success, and 0 or a negative value on failure. */
+  size_t len = OSTREE_SIGN_ED25519_SIG_SIZE;
+  if (EVP_DigestSignInit (ctx, NULL, NULL, NULL, pkey) == 1
+      && EVP_DigestSign (ctx, sig, &len, g_bytes_get_data (data, NULL), 
g_bytes_get_size (data))
+             == 1)
     sig_size = len;
 
   EVP_PKEY_free (pkey);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.5/src/libostree/ostree-sign-spki.c 
new/libostree-2026.6/src/libostree/ostree-sign-spki.c
--- old/libostree-2026.5/src/libostree/ostree-sign-spki.c       2025-09-26 
17:56:01.000000000 +0200
+++ new/libostree-2026.6/src/libostree/ostree-sign-spki.c       2026-10-30 
13:55:20.000000000 +0100
@@ -139,12 +139,15 @@
   unsigned long long sig_size = 0;
   g_autofree guchar *sig = NULL;
 
+  /* Both calls return 1 on success, and 0 or a negative value on failure. */
   size_t len;
-  if (EVP_DigestSignInit (ctx, NULL, NULL, NULL, pkey)
-      && EVP_DigestSign (ctx, NULL, &len, g_bytes_get_data (data, NULL), 
g_bytes_get_size (data)))
+  if (EVP_DigestSignInit (ctx, NULL, NULL, NULL, pkey) == 1
+      && EVP_DigestSign (ctx, NULL, &len, g_bytes_get_data (data, NULL), 
g_bytes_get_size (data))
+             == 1)
     {
       sig = g_malloc0 (len);
-      if (EVP_DigestSign (ctx, sig, &len, g_bytes_get_data (data, NULL), 
g_bytes_get_size (data)))
+      if (EVP_DigestSign (ctx, sig, &len, g_bytes_get_data (data, NULL), 
g_bytes_get_size (data))
+          == 1)
         sig_size = len;
     }
 
@@ -448,7 +451,7 @@
   g_debug ("Read spki revoked key = %s", hex);
 
   g_autoptr (GBytes) key_bytes = g_bytes_new_static (key, n_elements);
-  if (g_list_find_custom (sign->revoked_keys, key, g_bytes_compare) == NULL)
+  if (g_list_find_custom (sign->revoked_keys, key_bytes, g_bytes_compare) == 
NULL)
     {
       GBytes *new_key_bytes = g_bytes_new (key, n_elements);
       sign->revoked_keys = g_list_prepend (sign->revoked_keys, new_key_bytes);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.5/src/libostree/ostree-version.h 
new/libostree-2026.6/src/libostree/ostree-version.h
--- old/libostree-2026.5/src/libostree/ostree-version.h 2026-10-23 
22:13:02.000000000 +0200
+++ new/libostree-2026.6/src/libostree/ostree-version.h 2026-10-30 
15:34:34.000000000 +0100
@@ -41,7 +41,7 @@
  *
  * Since: 2017.4
  */
-#define OSTREE_RELEASE_VERSION (5)
+#define OSTREE_RELEASE_VERSION (6)
 
 /**
  * OSTREE_VERSION
@@ -50,7 +50,7 @@
  *
  * Since: 2017.4
  */
-#define OSTREE_VERSION (2026.5)
+#define OSTREE_VERSION (2026.6)
 
 /**
  * OSTREE_VERSION_S:
@@ -60,7 +60,7 @@
  *
  * Since: 2017.4
  */
-#define OSTREE_VERSION_S "2026.5"
+#define OSTREE_VERSION_S "2026.6"
 
 #define OSTREE_ENCODE_VERSION(year,release) \
         ((year) << 16 | (release))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.5/src/rofiles-fuse/main.c 
new/libostree-2026.6/src/rofiles-fuse/main.c
--- old/libostree-2026.5/src/rofiles-fuse/main.c        2025-06-30 
15:15:07.000000000 +0200
+++ new/libostree-2026.6/src/rofiles-fuse/main.c        2026-10-30 
13:55:20.000000000 +0100
@@ -446,7 +446,11 @@
 
   path = ENSURE_RELPATH (path);
 
-  if ((finfo->flags & O_ACCMODE) == O_RDONLY)
+  /* With atomic_o_trunc (the libfuse3 default) the kernel passes O_TRUNC
+   * here instead of sending a separate truncate, and O_RDONLY | O_TRUNC
+   * truncates too, so treat any O_TRUNC open as a write.
+   */
+  if ((finfo->flags & O_ACCMODE) == O_RDONLY && (finfo->flags & O_TRUNC) == 0)
     {
       /* Read */
       fd = openat (basefd, path, finfo->flags, mode);
@@ -632,7 +636,7 @@
 static int
 callback_removexattr (const char *path, const char *name)
 {
-  path = ENSURE_RELPATH (path);
+  PATH_WRITE_ENTRYPOINT (path);
 
   char buf[PATH_MAX];
   snprintf (buf, sizeof (buf), "/proc/self/fd/%d/%s", basefd, path);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libostree-2026.5/src/switchroot/ostree-prepare-root.c 
new/libostree-2026.6/src/switchroot/ostree-prepare-root.c
--- old/libostree-2026.5/src/switchroot/ostree-prepare-root.c   2026-10-23 
21:19:37.000000000 +0200
+++ new/libostree-2026.6/src/switchroot/ostree-prepare-root.c   2026-10-30 
13:55:20.000000000 +0100
@@ -298,8 +298,9 @@
   // filename.
   g_assert (deploy_directory_name && *deploy_directory_name);
 
-  /* These are global state directories underneath /run */
-  if (mkdirat (AT_FDCWD, OTCORE_RUN_OSTREE, 0755) < 0)
+  /* These are global state directories underneath /run. The initramfs may
+   * have created /run/ostree already, to hold INITRAMFS_MOUNT_VAR. */
+  if (mkdirat (AT_FDCWD, OTCORE_RUN_OSTREE, 0755) < 0 && errno != EEXIST)
     err (EXIT_FAILURE, "Failed to create %s", OTCORE_RUN_OSTREE);
   if (mkdirat (AT_FDCWD, OTCORE_RUN_OSTREE_PRIVATE, 0) < 0)
     err (EXIT_FAILURE, "Failed to create %s", OTCORE_RUN_OSTREE_PRIVATE);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.5/tests/test-basic-c.c 
new/libostree-2026.6/tests/test-basic-c.c
--- old/libostree-2026.5/tests/test-basic-c.c   2026-10-23 21:19:37.000000000 
+0200
+++ new/libostree-2026.6/tests/test-basic-c.c   2026-10-30 13:55:20.000000000 
+0100
@@ -636,6 +636,37 @@
   g_assert_error (local_error, G_IO_ERROR, G_IO_ERROR_FAILED);
 }
 
+static GVariant *
+new_test_dirtree (const char *file_name, const char *dir_name)
+{
+  const guint8 csum[OSTREE_SHA256_DIGEST_LEN] = { 0 };
+  g_autoptr (GVariantBuilder) files = g_variant_builder_new (G_VARIANT_TYPE 
("a(say)"));
+  g_autoptr (GVariantBuilder) dirs = g_variant_builder_new (G_VARIANT_TYPE 
("a(sayay)"));
+  g_variant_builder_add (files, "(s@ay)", file_name,
+                         g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, csum, 
sizeof (csum), 1));
+  g_variant_builder_add (dirs, "(s@ay@ay)", dir_name,
+                         g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, csum, 
sizeof (csum), 1),
+                         g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, csum, 
sizeof (csum), 1));
+  return g_variant_ref_sink (g_variant_new ("(@a(say)@a(sayay))", 
g_variant_builder_end (files),
+                                            g_variant_builder_end (dirs)));
+}
+
+static void
+test_dirtree_duplicate_name (void)
+{
+  g_autoptr (GError) local_error = NULL;
+  GError **error = &local_error;
+
+  g_autoptr (GVariant) dirtree = new_test_dirtree ("foo", "bar");
+  g_assert (ostree_validate_structureof_dirtree (dirtree, error));
+  g_assert_no_error (local_error);
+
+  /* A name listed as both a file and a subdirectory must be rejected */
+  g_autoptr (GVariant) dup_dirtree = new_test_dirtree ("foo", "foo");
+  g_assert (!ostree_validate_structureof_dirtree (dup_dirtree, error));
+  g_assert_error (local_error, G_IO_ERROR, G_IO_ERROR_FAILED);
+}
+
 static void
 create_static_delta_file (int dfd, const char *path)
 {
@@ -798,6 +829,7 @@
   g_test_add_func ("/commit-sizes-short-entry", test_commit_sizes_short_entry);
   g_test_add_func ("/read-xattrs", test_read_xattrs);
   g_test_add_func ("/dirmeta-xattrs", test_dirmeta_xattrs);
+  g_test_add_func ("/dirtree-duplicate-name", test_dirtree_duplicate_name);
   g_test_add_func ("/list-static-delta-entries", 
test_list_static_delta_entries);
 
   return g_test_run ();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.5/tests/test-delta-sign.sh 
new/libostree-2026.6/tests/test-delta-sign.sh
--- old/libostree-2026.5/tests/test-delta-sign.sh       2025-06-30 
15:15:07.000000000 +0200
+++ new/libostree-2026.6/tests/test-delta-sign.sh       2026-10-30 
13:55:20.000000000 +0100
@@ -25,7 +25,7 @@
 
 bindatafiles="bash true ostree"
 
-echo '1..7'
+echo '1..8'
 
 # This is explicitly opt in for testing
 export OSTREE_DUMMY_SIGN_ENABLED=1
@@ -170,3 +170,22 @@
 assert_file_has_content apply-offline-bad-key.txt "signature: dummy: incorrect 
signatures found: 1"
 
 echo 'ok apply offline failed with dummy and bad key'
+
+# A superblock file comes from outside the repository and is read before its
+# signature is checked; make sure one whose signature key is not
+# NUL-terminated isn't accepted as signed.
+${CMD_PREFIX} ostree --repo=repo static-delta generate --from=${origrev} 
--to=${newrev} --inline --sign-type=dummy --sign=dummysign 
--filename=signed.delta
+${CMD_PREFIX} ostree --repo=repo static-delta verify --sign-type=dummy 
./signed.delta dummysign > verify-file-signed.txt
+assert_file_has_content verify-file-signed.txt "Verification OK"
+cp signed.delta corrupt.delta
+key=ostree.sign.dummy
+offset=$(($(grep -obaF ${key} corrupt.delta | tail -n 1 | cut -d: -f1) + 
${#key}))
+assert_streq "$(dd if=corrupt.delta bs=1 skip=${offset} count=1 status=none | 
od -An -tx1 | tr -d ' ')" "00"
+printf 'X' | dd of=corrupt.delta bs=1 seek=${offset} conv=notrunc status=none
+${CMD_PREFIX} ostree --repo=repo static-delta verify --sign-type=dummy 
./corrupt.delta dummysign > verify-corrupt-key.txt 2>&1 && exit 1
+assert_file_has_content verify-corrupt-key.txt "no signatures in static-delta"
+${CMD_PREFIX} ostree --repo=repo static-delta show ./corrupt.delta > 
show-corrupt-key.txt 2>&1 && exit 1
+assert_file_has_content show-corrupt-key.txt "Signed: no"
+assert_file_has_content show-corrupt-key.txt "^error: "
+
+echo 'ok corrupt signature key in delta superblock'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.5/tests/test-delta.sh 
new/libostree-2026.6/tests/test-delta.sh
--- old/libostree-2026.5/tests/test-delta.sh    2026-10-23 21:19:37.000000000 
+0200
+++ new/libostree-2026.6/tests/test-delta.sh    2026-10-30 13:55:20.000000000 
+0100
@@ -26,7 +26,7 @@
 bindatafiles="bash true ostree"
 morebindatafiles="false ls"
 
-echo '1..14'
+echo '1..15'
 
 mkdir repo
 ostree_repo_init repo --mode=archive
@@ -268,6 +268,21 @@
 
 echo 'ok generate + show empty delta part'
 
+rm -rf repo3
+ostree_repo_init repo3 --mode=archive
+${CMD_PREFIX} ostree --repo=repo3 pull-local repo ${newrev} ${samerev}
+${CMD_PREFIX} ostree --repo=repo3 static-delta generate --from=${newrev} 
--to=${samerev}
+deltaprefix=$(get_assert_one_direntry_matching repo3/deltas '.')
+deltadir=$(get_assert_one_direntry_matching repo3/deltas/${deltaprefix} '-')
+truncate -s 0 repo3/deltas/${deltaprefix}/${deltadir}/0
+if ${CMD_PREFIX} ostree --repo=repo3 static-delta show ${newrev}-${samerev} 2> 
err.txt; then
+    assert_not_reached "static-delta show with a zero-length part unexpectedly 
succeeded"
+fi
+assert_file_has_content err.txt "Empty static delta part"
+rm -rf repo3
+
+echo 'ok show zero-length delta part file'
+
 ${CMD_PREFIX} ostree --repo=repo summary -u
 
 rm -rf repo2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.5/tests/test-fetcher-uri.c 
new/libostree-2026.6/tests/test-fetcher-uri.c
--- old/libostree-2026.5/tests/test-fetcher-uri.c       1970-01-01 
01:00:00.000000000 +0100
+++ new/libostree-2026.6/tests/test-fetcher-uri.c       2026-10-30 
13:55:20.000000000 +0100
@@ -0,0 +1,58 @@
+/*
+ * 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 <glib.h>
+
+#include "ostree-fetcher.h"
+
+static void
+assert_parses_to (const char *input, const char *expected)
+{
+  g_autoptr (GError) error = NULL;
+  OstreeFetcherURI *uri = _ostree_fetcher_uri_parse (input, &error);
+  g_assert_no_error (error);
+  g_assert_nonnull (uri);
+
+  g_autofree char *str = _ostree_fetcher_uri_to_string (uri);
+  g_assert_cmpstr (str, ==, expected);
+
+  _ostree_fetcher_uri_free (uri);
+}
+
+/* Dropping a default port must keep the scheme; in particular an explicit
+ * :443 must not turn an https URI into http.
+ */
+static void
+test_fetcher_uri_default_port (void)
+{
+  assert_parses_to ("https://example.com:443/repo";, 
"https://example.com/repo";);
+  assert_parses_to ("http://example.com:80/repo";, "http://example.com/repo";);
+  assert_parses_to ("https://example.com:8443/repo";, 
"https://example.com:8443/repo";);
+  assert_parses_to ("http://example.com:443/repo";, 
"http://example.com:443/repo";);
+}
+
+int
+main (int argc, char **argv)
+{
+  g_test_init (&argc, &argv, NULL);
+
+  g_test_add_func ("/fetcher-uri/default-port", test_fetcher_uri_default_port);
+
+  return g_test_run ();
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.5/tests/test-otcore.c 
new/libostree-2026.6/tests/test-otcore.c
--- old/libostree-2026.5/tests/test-otcore.c    2026-10-23 21:19:37.000000000 
+0200
+++ new/libostree-2026.6/tests/test-otcore.c    2026-10-30 13:55:20.000000000 
+0100
@@ -33,34 +33,107 @@
 
 #ifdef HAVE_OPENSSL
 /* An ECDSA P-256 public key in DER SubjectPublicKeyInfo form, as produced by
- *   openssl ecparam -name prime256v1 -genkey -noout |
- *     openssl ec -pubout -outform DER
+ *   openssl ecparam -name prime256v1 -genkey -noout -out key.pem
+ *   openssl ec -in key.pem -pubout -outform DER
  * The spki mechanism takes any key d2i_PUBKEY() understands.
  */
 static const guint8 ec_p256_pubkey[]
     = { 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 
0x02, 0x01,
         0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03, 
0x42, 0x00,
-        0x04, 0x80, 0x85, 0xe0, 0x67, 0xba, 0x0e, 0x92, 0xec, 0xa9, 0xf6, 
0xfc, 0xa0,
-        0x58, 0xc1, 0xda, 0x3f, 0x9b, 0xb3, 0x23, 0x59, 0x88, 0x93, 0x9d, 
0x66, 0x36,
-        0x30, 0x74, 0xb2, 0x7a, 0x9f, 0x4a, 0xf5, 0x53, 0x8d, 0x1b, 0xd8, 
0xe6, 0xc7,
-        0x82, 0x46, 0xa1, 0x65, 0x4d, 0x8a, 0x70, 0x2e, 0x71, 0xc3, 0x84, 
0x8a, 0x20,
-        0x3a, 0xc4, 0x18, 0x38, 0x9e, 0x24, 0x92, 0x99, 0x82, 0xcd, 0x80, 
0x7f, 0xfd };
+        0x04, 0xfe, 0x90, 0x44, 0x36, 0x3b, 0xf0, 0xd0, 0x3e, 0x11, 0xb5, 
0x95, 0x5a,
+        0x8e, 0x8f, 0x0f, 0x15, 0xc7, 0x10, 0x5d, 0x15, 0x2d, 0xd2, 0x1d, 
0xe5, 0xf8,
+        0x06, 0xfa, 0x0a, 0xe0, 0xf4, 0x55, 0x40, 0xc6, 0x09, 0xec, 0xad, 
0x08, 0xfb,
+        0x46, 0xed, 0xfe, 0xdc, 0x6f, 0xa3, 0x1a, 0x32, 0xc9, 0x23, 0xd3, 
0xd1, 0xd3,
+        0xee, 0x45, 0x04, 0xda, 0xd7, 0xde, 0xf7, 0xc2, 0x93, 0x7f, 0x2a, 
0x91, 0xd8 };
+
+/* A signature of spki_signed_data with the private half of ec_p256_pubkey, as
+ * produced by
+ *   openssl dgst -sha256 -sign key.pem
+ */
+static const guint8 ec_p256_signature[]
+    = { 0x30, 0x46, 0x02, 0x21, 0x00, 0xb1, 0x7a, 0x54, 0xe8, 0x06, 0xf4, 
0x6d, 0xed, 0x7e, 0xbb,
+        0x13, 0xc0, 0x42, 0x56, 0x77, 0x78, 0x47, 0x26, 0xbc, 0xf3, 0x55, 
0x2d, 0x45, 0x54, 0x01,
+        0xb2, 0x37, 0xe8, 0x58, 0x73, 0x09, 0x6c, 0x02, 0x21, 0x00, 0xbc, 
0xd7, 0x33, 0xc2, 0xa2,
+        0xe0, 0x97, 0x45, 0x93, 0xf2, 0x55, 0xe3, 0xf8, 0x90, 0xbc, 0x6f, 
0xa4, 0xcd, 0x74, 0x97,
+        0x31, 0x4a, 0xfb, 0xc2, 0x85, 0xf7, 0xfe, 0x7f, 0x41, 0xb2, 0xd8, 0x0c 
};
+
+/* A DSA public key in DER SubjectPublicKeyInfo form, as produced by
+ *   openssl genpkey -genparam -algorithm DSA -pkeyopt dsa_paramgen_bits:1024 \
+ *     -pkeyopt dsa_paramgen_q_bits:160 -out params.pem
+ *   openssl genpkey -paramfile params.pem | openssl pkey -pubout -outform DER
+ */
+static const guint8 dsa_pubkey[] = {
+  0x30, 0x82, 0x01, 0xb6, 0x30, 0x82, 0x01, 0x2b, 0x06, 0x07, 0x2a, 0x86, 
0x48, 0xce, 0x38, 0x04,
+  0x01, 0x30, 0x82, 0x01, 0x1e, 0x02, 0x81, 0x81, 0x00, 0xed, 0x71, 0x14, 
0xca, 0xc4, 0x6a, 0x57,
+  0x2b, 0xe4, 0x59, 0x11, 0xef, 0x76, 0x1b, 0x02, 0xec, 0xde, 0x02, 0x12, 
0x82, 0x5e, 0xeb, 0xda,
+  0xc3, 0x6f, 0xbd, 0x9c, 0x68, 0xcc, 0x41, 0xfa, 0xf1, 0x35, 0x03, 0xf8, 
0x96, 0x26, 0xa0, 0xf6,
+  0x14, 0xdb, 0xea, 0xab, 0x49, 0xeb, 0x66, 0x4a, 0xf5, 0x04, 0xc8, 0x16, 
0x9f, 0xf1, 0xbe, 0x2c,
+  0xff, 0xbc, 0xc5, 0x40, 0xeb, 0xd1, 0xe9, 0x2c, 0x6f, 0x10, 0x1f, 0x02, 
0x92, 0xf7, 0xd7, 0xc3,
+  0x96, 0x05, 0x2d, 0x66, 0xb3, 0x73, 0x27, 0x27, 0xf1, 0x46, 0x88, 0x94, 
0x07, 0x09, 0xc4, 0xf4,
+  0xcc, 0xe5, 0x88, 0x03, 0x8e, 0x48, 0x2b, 0x5c, 0x89, 0x30, 0x87, 0xab, 
0x9a, 0xf3, 0x9a, 0x4a,
+  0x8a, 0xdd, 0x0b, 0xc1, 0x92, 0xd0, 0xc8, 0x4d, 0xe4, 0x10, 0xa5, 0xbf, 
0xab, 0xd6, 0x3a, 0x9b,
+  0x39, 0x03, 0xd4, 0x11, 0x3d, 0x15, 0xe0, 0x07, 0x99, 0x02, 0x15, 0x00, 
0xa4, 0x8c, 0xf3, 0x4c,
+  0xd4, 0xf7, 0x2c, 0x2c, 0x0e, 0x60, 0x87, 0x33, 0x7f, 0x15, 0x70, 0x0b, 
0xa9, 0x35, 0x33, 0x85,
+  0x02, 0x81, 0x80, 0x22, 0xc9, 0x2c, 0xac, 0x84, 0x09, 0xb9, 0x36, 0x4a, 
0x33, 0xf7, 0x4d, 0xe1,
+  0x3b, 0x88, 0xcf, 0x9f, 0xfc, 0xea, 0x0c, 0x6e, 0x21, 0x1c, 0xf4, 0x7c, 
0x9d, 0x52, 0x04, 0x30,
+  0xb8, 0x4e, 0x6d, 0x38, 0xa5, 0x9a, 0x8a, 0x0d, 0x4d, 0x6c, 0x83, 0x38, 
0xa8, 0x58, 0x8f, 0x6b,
+  0x67, 0x07, 0x6a, 0xb9, 0x4e, 0xae, 0x72, 0xee, 0x2f, 0xca, 0x05, 0x12, 
0x03, 0x69, 0x85, 0x8b,
+  0x65, 0x03, 0x87, 0x02, 0x07, 0x7d, 0xdb, 0x84, 0x4a, 0x97, 0x6f, 0xe8, 
0x9a, 0xfc, 0x98, 0xf0,
+  0xe2, 0xac, 0xf0, 0xc0, 0x60, 0xe2, 0xda, 0xd1, 0x8b, 0xb0, 0x78, 0x12, 
0xc6, 0x44, 0xfa, 0x67,
+  0x4b, 0x05, 0x9e, 0x47, 0xc7, 0xcc, 0x05, 0x85, 0xc5, 0x85, 0xc9, 0x55, 
0xb3, 0x12, 0x02, 0xf3,
+  0x15, 0xfb, 0x89, 0x4b, 0x30, 0x69, 0xc6, 0xac, 0xf7, 0x27, 0x86, 0x8b, 
0x36, 0x97, 0x98, 0x9b,
+  0xd4, 0x67, 0x31, 0x03, 0x81, 0x84, 0x00, 0x02, 0x81, 0x80, 0x3c, 0x0c, 
0x79, 0x8b, 0x22, 0xac,
+  0xe2, 0xd2, 0xa8, 0x4f, 0x60, 0x5c, 0xa4, 0xed, 0x24, 0xe9, 0xca, 0xab, 
0x13, 0x47, 0x1a, 0xb7,
+  0xd5, 0x70, 0x19, 0xd9, 0xc2, 0x48, 0x93, 0xe9, 0xba, 0xec, 0x19, 0x4b, 
0xb4, 0xf9, 0x22, 0xa3,
+  0x6f, 0x99, 0xc2, 0xe1, 0x4e, 0x93, 0xb0, 0x87, 0xe2, 0x5f, 0x3e, 0x8b, 
0x68, 0x68, 0x26, 0x1f,
+  0xd9, 0x7b, 0x34, 0xe7, 0x4d, 0xa9, 0x76, 0xa2, 0xd2, 0xd1, 0x9d, 0x6b, 
0x6b, 0xdf, 0xa2, 0x32,
+  0xf8, 0xc6, 0x15, 0x55, 0xb0, 0x83, 0x43, 0x1c, 0xf9, 0x05, 0xbb, 0x9f, 
0x10, 0x8c, 0xb6, 0x91,
+  0xf5, 0x9a, 0xef, 0xb4, 0xb2, 0xb8, 0x47, 0x2a, 0x5c, 0x0e, 0xa3, 0xde, 
0x0d, 0x62, 0x16, 0x47,
+  0xe0, 0x35, 0x98, 0x06, 0x4a, 0x17, 0xe1, 0xd5, 0xad, 0x52, 0x08, 0xb9, 
0xfc, 0x88, 0x2a, 0x5f,
+  0x52, 0xd0, 0xdc, 0xb6, 0xd6, 0x8e, 0x7f, 0x43, 0x61, 0x7d
+};
 
-static void
-test_spki (void)
+static const char spki_signed_data[] = "some signed data";
+
+/* Not a well-formed ECDSA or DSA signature, which openssl reports as an error
+ * rather than as a signature mismatch.
+ */
+static const char spki_malformed_signature[] = 
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
+
+static bool
+validate_spki (const char *data, const guint8 *pubkey, gsize pubkey_size, 
const void *signature,
+               gsize signature_size)
 {
-  g_autoptr (GBytes) data = g_bytes_new_static ("some signed data", 16);
-  g_autoptr (GBytes) pubkey = g_bytes_new_static (ec_p256_pubkey, sizeof 
(ec_p256_pubkey));
-  /* Not a well-formed ECDSA signature, which openssl reports as an error
-   * rather than as a signature mismatch.
-   */
-  g_autoptr (GBytes) signature = g_bytes_new_static 
("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", 32);
+  g_autoptr (GBytes) data_bytes = g_bytes_new_static (data, strlen (data));
+  g_autoptr (GBytes) pubkey_bytes = g_bytes_new_static (pubkey, pubkey_size);
+  g_autoptr (GBytes) signature_bytes = g_bytes_new_static (signature, 
signature_size);
   bool valid = false;
   g_autoptr (GError) error = NULL;
 
-  g_assert (otcore_validate_spki_signature (data, pubkey, signature, &valid, 
&error));
+  g_assert (
+      otcore_validate_spki_signature (data_bytes, pubkey_bytes, 
signature_bytes, &valid, &error));
   g_assert_no_error (error);
-  g_assert (!valid);
+  return valid;
+}
+
+static void
+test_spki_ecdsa (void)
+{
+  g_assert (validate_spki (spki_signed_data, ec_p256_pubkey, sizeof 
(ec_p256_pubkey),
+                           ec_p256_signature, sizeof (ec_p256_signature)));
+  g_assert (!validate_spki ("some other data", ec_p256_pubkey, sizeof 
(ec_p256_pubkey),
+                            ec_p256_signature, sizeof (ec_p256_signature)));
+  g_assert (!validate_spki (spki_signed_data, ec_p256_pubkey, sizeof 
(ec_p256_pubkey),
+                            spki_malformed_signature, strlen 
(spki_malformed_signature)));
+  g_assert (!validate_spki (spki_signed_data, ec_p256_pubkey, sizeof 
(ec_p256_pubkey), "", 0));
+}
+
+static void
+test_spki_dsa (void)
+{
+  g_assert (!validate_spki (spki_signed_data, dsa_pubkey, sizeof (dsa_pubkey),
+                            spki_malformed_signature, strlen 
(spki_malformed_signature)));
+  g_assert (!validate_spki (spki_signed_data, dsa_pubkey, sizeof (dsa_pubkey), 
"", 0));
 }
 #endif
 
@@ -170,7 +243,8 @@
   g_test_add_func ("/ed25519", test_ed25519);
 #ifdef HAVE_OPENSSL
   otcore_spki_init ();
-  g_test_add_func ("/spki", test_spki);
+  g_test_add_func ("/spki/ecdsa", test_spki_ecdsa);
+  g_test_add_func ("/spki/dsa", test_spki_dsa);
 #endif
   g_test_add_func ("/prepare-root-cmdline", test_prepare_root_cmdline);
   g_test_add_func ("/prepare-root-config", test_prepare_root_config);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.5/tests/test-repo.c 
new/libostree-2026.6/tests/test-repo.c
--- old/libostree-2026.5/tests/test-repo.c      2026-10-23 21:19:37.000000000 
+0200
+++ new/libostree-2026.6/tests/test-repo.c      2026-10-30 13:55:20.000000000 
+0100
@@ -840,11 +840,23 @@
 
 typedef struct
 {
+  const char *path;
   size_t len;
   gboolean write_first;
   gboolean repeat_patch;
 } DeltaPatchTest;
 
+static const DeltaPatchTest delta_patch_tests[] = {
+  { "/repo/delta/bspatch-write-empty", 0, FALSE, FALSE },
+  { "/repo/delta/bspatch-write", 3, FALSE, FALSE },
+  { "/repo/delta/bspatch-write-multi-chunk", 65537, FALSE, FALSE },
+  { "/repo/delta/bspatch-write-checksum-chunks", 1024 * 1024 + 1, FALSE, FALSE 
},
+  { "/repo/delta/write-bspatch", 3, TRUE, FALSE },
+  { "/repo/delta/repeated-bspatch", 3, FALSE, TRUE },
+  { "/repo/delta/write-bspatch-multi-chunk", 65537, TRUE, FALSE },
+  { "/repo/delta/repeated-bspatch-multi-chunk", 65537, FALSE, TRUE },
+};
+
 /* Exercise the real opcode executor and commit path, including a WRITE after
  * BSPATCH. Checking the stored bytes independently of the accumulated checksum
  * catches an incorrect file offset after mapped output.
@@ -859,17 +871,20 @@
   g_autoptr (OstreeRepo) repo = ostree_repo_create_at (
       fixture->tmpdir.fd, "repo", OSTREE_REPO_MODE_BARE_USER_ONLY, NULL, NULL, 
&error);
   g_assert_no_error (error);
+  if (g_strcmp0 (g_getenv ("OSTREE_REPO_TEST_ERROR"), "disable-mmap") == 0)
+    g_assert_true ((repo->test_error_flags & 
OSTREE_REPO_TEST_ERROR_DISABLE_MMAP) != 0);
   g_autoptr (OstreeRepo) reference = ostree_repo_create_at (
       fixture->tmpdir.fd, "reference", OSTREE_REPO_MODE_BARE_USER_ONLY, NULL, 
NULL, &error);
   g_assert_no_error (error);
   g_autofree uint8_t *expected = g_malloc (expected_len);
   memset (expected, 'A', expected_len);
   expected[test->write_first ? 0 : expected_len - 1] = 'D';
+  static const uint8_t source[] = "Dld";
   g_autofree char *expected_checksum = ostree_repo_write_regfile_inline (
       reference, NULL, 0, 0, S_IFREG | 0644, NULL, expected, expected_len, 
NULL, &error);
   g_assert_no_error (error);
   g_autofree char *source_checksum = ostree_repo_write_regfile_inline (
-      repo, NULL, 0, 0, S_IFREG | 0644, NULL, (const uint8_t *)"Dld", 3, NULL, 
&error);
+      repo, NULL, 0, 0, S_IFREG | 0644, NULL, source, sizeof (source) - 1, 
NULL, &error);
   g_assert_no_error (error);
 
   uint8_t source_bytes[OSTREE_SHA256_DIGEST_LEN];
@@ -878,10 +893,19 @@
   g_byte_array_append (payload, source_bytes, sizeof (source_bytes));
   if (len > 0)
     {
-      /* A bspatch control triple: no diff bytes, len literal bytes, no seek. 
*/
-      uint64_t control[] = { 0, GUINT64_TO_LE (len), 0 };
+      /* The diff block uses old bytes; the remaining bytes are literals. Keep
+       * the source small so fallocate fault injection still targets the 
output.
+       */
+      const size_t diff_len = MIN (len, sizeof (source) - 1);
+      uint64_t control[] = { GUINT64_TO_LE (diff_len), GUINT64_TO_LE (len - 
diff_len), 0 };
       g_byte_array_append (payload, (const uint8_t *)control, sizeof 
(control));
-      g_byte_array_append (payload, expected + (test->write_first ? 1 : 0), 
len);
+      for (size_t i = 0; i < diff_len; i++)
+        {
+          const uint8_t diff = 'A' - source[i];
+          g_byte_array_append (payload, &diff, 1);
+        }
+      g_byte_array_append (payload, expected + (test->write_first ? 1 : 0) + 
diff_len,
+                           len - diff_len);
     }
   const size_t patch_len = payload->len - sizeof (source_bytes);
   const size_t write_offset = payload->len;
@@ -1005,36 +1029,42 @@
   g_assert_cmpmem (actual, bytes_read, expected, expected_len);
 }
 
+/* Run the same opcode fixtures in a fresh process so OSTREE_REPO_TEST_ERROR is
+ * set before any repositories (or their worker threads) are created. */
+static void
+test_delta_disable_mmap (void)
+{
+  g_autoptr (GError) error = NULL;
+  g_autofree char *self = g_file_read_link ("/proc/self/exe", &error);
+  g_assert_no_error (error);
+  g_auto (GStrv) disable_mmap_env
+      = g_environ_setenv (g_get_environ (), "OSTREE_REPO_TEST_ERROR", 
"disable-mmap", TRUE);
+
+  for (guint i = 0; i < G_N_ELEMENTS (delta_patch_tests); i++)
+    {
+      char *argv[] = { self, "-p", (char *)delta_patch_tests[i].path, NULL };
+      int status;
+      g_autofree char *stdout = NULL;
+      g_autofree char *stderr = NULL;
+      g_assert_true (g_spawn_sync (NULL, argv, disable_mmap_env, 
G_SPAWN_DEFAULT, NULL, NULL,
+                                   &stdout, &stderr, &status, &error));
+      g_assert_no_error (error);
+      if (!g_spawn_check_exit_status (status, &error))
+        g_error ("%s failed: %s\n%s", delta_patch_tests[i].path, 
error->message, stderr);
+    }
+}
+
 int
 main (int argc, char **argv)
 {
   setlocale (LC_ALL, "");
   g_test_init (&argc, &argv, NULL);
 
-  static const DeltaPatchTest patch_tests[] = {
-    { 0, FALSE, FALSE },     { 3, FALSE, FALSE },
-    { 65537, FALSE, FALSE }, { 1024 * 1024 + 1, FALSE, FALSE },
-    { 3, TRUE, FALSE },      { 3, FALSE, TRUE },
-    { 65537, TRUE, FALSE },  { 65537, FALSE, TRUE },
-  };
-
   g_test_add ("/repo/hash", Fixture, NULL, setup, test_repo_hash, teardown);
-  g_test_add ("/repo/delta/bspatch-write-empty", Fixture, &patch_tests[0], 
setup,
-              test_delta_bspatch_write, teardown);
-  g_test_add ("/repo/delta/bspatch-write", Fixture, &patch_tests[1], setup,
-              test_delta_bspatch_write, teardown);
-  g_test_add ("/repo/delta/bspatch-write-multi-chunk", Fixture, 
&patch_tests[2], setup,
-              test_delta_bspatch_write, teardown);
-  g_test_add ("/repo/delta/bspatch-write-checksum-chunks", Fixture, 
&patch_tests[3], setup,
-              test_delta_bspatch_write, teardown);
-  g_test_add ("/repo/delta/write-bspatch", Fixture, &patch_tests[4], setup,
-              test_delta_bspatch_write, teardown);
-  g_test_add ("/repo/delta/repeated-bspatch", Fixture, &patch_tests[5], setup,
-              test_delta_bspatch_write, teardown);
-  g_test_add ("/repo/delta/write-bspatch-multi-chunk", Fixture, 
&patch_tests[6], setup,
-              test_delta_bspatch_write, teardown);
-  g_test_add ("/repo/delta/repeated-bspatch-multi-chunk", Fixture, 
&patch_tests[7], setup,
-              test_delta_bspatch_write, teardown);
+  for (guint i = 0; i < G_N_ELEMENTS (delta_patch_tests); i++)
+    g_test_add (delta_patch_tests[i].path, Fixture, &delta_patch_tests[i], 
setup,
+                test_delta_bspatch_write, teardown);
+  g_test_add_func ("/repo/delta/disable-mmap", test_delta_disable_mmap);
   g_test_add ("/repo/hash/closed", Fixture, NULL, setup, 
test_repo_hash_closed, teardown);
   g_test_add ("/repo/equal", Fixture, NULL, setup, test_repo_equal, teardown);
   g_test_add ("/repo/get_min_free_space", Fixture, NULL, setup, 
test_repo_get_min_free_space,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.5/tests/test-rofiles-fuse.sh 
new/libostree-2026.6/tests/test-rofiles-fuse.sh
--- old/libostree-2026.5/tests/test-rofiles-fuse.sh     2025-06-30 
15:15:07.000000000 +0200
+++ new/libostree-2026.6/tests/test-rofiles-fuse.sh     2026-10-30 
13:55:20.000000000 +0100
@@ -51,6 +51,12 @@
     assert_file_has_content err.txt "Read-only file system"
     assert_file_has_content mnt/firstfile first
     assert_file_has_content checkout-test2/firstfile first
+    # O_RDONLY | O_TRUNC truncates too
+    if python3 -c 'import os, sys; os.open(sys.argv[1], os.O_RDONLY | 
os.O_TRUNC)' mnt/${path} 2>err.txt; then
+        assert_not_reached "inplace truncation O_RDONLY ${path}"
+    fi
+    assert_file_has_content err.txt "Read-only file system"
+    assert_file_has_content checkout-test2/firstfile first
 done
 echo "ok failed inplace mutation (open O_TRUNCATE)"
 
@@ -76,6 +82,15 @@
 if setfattr -n user.foo -v bar mnt/firstfile-link; then
     assert_not_reached "set xattr on linked file"
 fi
+# Add an xattr behind the mount so there is one to remove
+setfattr -n user.foo -v bar checkout-test2/firstfile
+if setfattr -x user.foo mnt/firstfile 2>err.txt; then
+    assert_not_reached "remove xattr on linked file"
+fi
+assert_file_has_content err.txt "Read-only file system"
+getfattr -n user.foo checkout-test2/firstfile > out.txt
+assert_file_has_content_literal out.txt 'user.foo="bar"'
+setfattr -x user.foo checkout-test2/firstfile
 
 # Test creating new files, using chown + chmod on them as well
 echo anewfile-for-fuse > mnt/anewfile-for-fuse
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libostree-2026.5/tests/test-signed-commit-spki.sh 
new/libostree-2026.6/tests/test-signed-commit-spki.sh
--- old/libostree-2026.5/tests/test-signed-commit-spki.sh       2025-06-30 
15:15:07.000000000 +0200
+++ new/libostree-2026.6/tests/test-signed-commit-spki.sh       2026-10-30 
13:55:20.000000000 +0100
@@ -152,12 +152,14 @@
 
 tap_ok "verify spki system-wide configuration"
 
-# Add the public key into revoked list
+# Add the public key into revoked list, next to another revoked key
+gen_spki_random_public_pem > ${test_tmpdir}/revoked.spki.d/random
 cat "${SPKIPUBLICPEM}" > ${test_tmpdir}/revoked.spki.d/correct
 # Check if public key is not valid anymore
-if ${CMD_PREFIX} ostree --repo=${test_tmpdir}/repo sign --verify 
--sign-type=spki --keys-dir=${test_tmpdir} ${COMMIT}; then
+if ${CMD_PREFIX} ostree --repo=${test_tmpdir}/repo sign --verify 
--sign-type=spki --keys-dir=${test_tmpdir} ${COMMIT} 2>err.txt; then
     exit 1
 fi
+assert_file_has_content err.txt 'spki: Signature couldn.t be verified'
 rm -rf ${test_tmpdir}/{trusted,revoked}.spki.d
 tap_ok "verify spki revoking keys mechanism"
 

Reply via email to