commit:     c1a6000b2ca54c0f9ab0e8c943e0fa329dcf856d
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Fri Sep 20 06:14:30 2024 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri Sep 20 06:15:13 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=c1a6000b

dev-util/ostree: fix crash w/ net-misc/curl-8.10.1

I'll leave the bump to maintainers.

Closes: https://bugs.gentoo.org/939813
Signed-off-by: Sam James <sam <AT> gentoo.org>

 dev-util/ostree/files/ostree-2024.3-curl.patch |  58 ++++++++++++
 dev-util/ostree/ostree-2024.3-r1.ebuild        | 122 +++++++++++++++++++++++++
 2 files changed, 180 insertions(+)

diff --git a/dev-util/ostree/files/ostree-2024.3-curl.patch 
b/dev-util/ostree/files/ostree-2024.3-curl.patch
new file mode 100644
index 000000000000..7e7a3a44d1f7
--- /dev/null
+++ b/dev-util/ostree/files/ostree-2024.3-curl.patch
@@ -0,0 +1,58 @@
+https://bugs.gentoo.org/939813
+https://github.com/ostreedev/ostree/pull/3307
+
+From 4d755a85225ea0a02d4580d088bb8a97138cb040 Mon Sep 17 00:00:00 2001
+From: Colin Walters <[email protected]>
+Date: Wed, 18 Sep 2024 13:41:59 -0400
+Subject: [PATCH] curl: Make socket callback during cleanup into no-op
+
+Because curl_multi_cleanup may invoke callbacks, we effectively have
+some circular references going on here. See discussion in
+
+https://github.com/curl/curl/issues/14860
+
+Basically what we do is the socket callback libcurl may invoke into a no-op 
when
+we detect we're finalizing. The data structures are owned by this object and
+not by the callbacks, and will be destroyed below. Note that
+e.g. g_hash_table_unref() may itself invoke callbacks, which is where
+some data is cleaned up.
+
+Signed-off-by: Colin Walters <[email protected]>
+--- a/src/libostree/ostree-fetcher-curl.c
++++ b/src/libostree/ostree-fetcher-curl.c
+@@ -78,6 +78,7 @@ struct OstreeFetcher
+   struct curl_slist *extra_headers;
+   int tmpdir_dfd;
+   bool force_anonymous;
++  bool finalizing; // Set if we're in the process of teardown
+   char *custom_user_agent;
+   guint32 opt_low_speed_limit;
+   guint32 opt_low_speed_time;
+@@ -180,6 +181,15 @@ _ostree_fetcher_finalize (GObject *object)
+ {
+   OstreeFetcher *self = OSTREE_FETCHER (object);
+ 
++  // Because curl_multi_cleanup may invoke callbacks, we effectively have
++  // some circular references going on here. See discussion in
++  // https://github.com/curl/curl/issues/14860
++  // Basically what we do is make most callbacks libcurl may invoke into 
no-ops when
++  // we detect we're finalizing. The data structures are owned by this object 
and
++  // not by the callbacks, and will be destroyed below. Note that
++  // e.g. g_hash_table_unref() may itself invoke callbacks, which is where
++  // some data is cleaned up.
++  self->finalizing = true;
+   curl_multi_cleanup (self->multi);
+   g_free (self->remote_name);
+   g_free (self->tls_ca_db_path);
+@@ -528,6 +538,10 @@ sock_cb (CURL *easy, curl_socket_t s, int what, void 
*cbp, void *sockp)
+   OstreeFetcher *fetcher = cbp;
+   SockInfo *fdp = (SockInfo *)sockp;
+ 
++  // We do nothing if we're in the process of teardown; see below.
++  if (fetcher->finalizing)
++    return 0;
++
+   if (what == CURL_POLL_REMOVE)
+     {
+       if (!g_hash_table_remove (fetcher->sockets, fdp))
+

diff --git a/dev-util/ostree/ostree-2024.3-r1.ebuild 
b/dev-util/ostree/ostree-2024.3-r1.ebuild
new file mode 100644
index 000000000000..05bac56034ba
--- /dev/null
+++ b/dev-util/ostree/ostree-2024.3-r1.ebuild
@@ -0,0 +1,122 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools systemd tmpfiles
+
+DESCRIPTION="Operating system and container binary deployment and upgrades"
+HOMEPAGE="https://ostreedev.github.io/ostree/";
+SRC_URI="
+       
https://github.com/ostreedev/ostree/releases/download/v${PV}/lib${P}.tar.xz
+               -> ${P}.tar.xz
+"
+S="${WORKDIR}/lib${P}"
+
+LICENSE="LGPL-2+"
+SLOT="0"
+KEYWORDS="amd64 ~arm arm64 ~loong ~ppc64 ~riscv x86"
+IUSE="archive +curl doc dracut gnutls +gpg grub +http2 httpd introspection 
libmount selinux sodium ssl +soup systemd zeroconf"
+RESTRICT="test"
+REQUIRED_USE="
+       dracut? ( systemd )
+       http2? ( curl )
+       httpd? ( || ( curl soup ) )
+"
+
+RDEPEND="
+       app-arch/xz-utils
+       dev-libs/glib:2
+       sys-fs/fuse:3
+       sys-libs/zlib
+       archive? ( app-arch/libarchive:= )
+       curl? ( net-misc/curl )
+       dracut? ( sys-kernel/dracut )
+       gpg? (
+               app-crypt/gpgme:=
+               dev-libs/libgpg-error
+       )
+       grub? ( sys-boot/grub:2= )
+       introspection? ( dev-libs/gobject-introspection )
+       libmount? ( sys-apps/util-linux )
+       selinux? ( sys-libs/libselinux )
+       sodium? ( >=dev-libs/libsodium-1.0.14:= )
+       soup? ( net-libs/libsoup:3.0 )
+       ssl? (
+               gnutls? ( net-libs/gnutls:= )
+               !gnutls? (
+                       dev-libs/openssl:0=
+               )
+       )
+       systemd? ( sys-apps/systemd:0= )
+       zeroconf? ( net-dns/avahi[dbus] )
+"
+DEPEND="${RDEPEND}
+       app-text/docbook-xml-dtd:4.2
+       app-text/docbook-xsl-stylesheets
+       doc? (
+               dev-util/gtk-doc
+               app-text/docbook-xml-dtd:4.3
+       )
+"
+BDEPEND="
+       dev-libs/libxslt
+       dev-util/glib-utils
+       sys-devel/flex
+       sys-devel/bison
+       virtual/pkgconfig
+"
+
+PATCHES=(
+       "${FILESDIR}"/ostree-2023.3-dont-force-clang-introspection.patch
+       "${FILESDIR}"/${P}-curl.patch
+)
+
+src_prepare() {
+       default
+       eautoreconf
+}
+
+src_configure() {
+       # Needs Bison (bug #884289)
+       unset YACC
+
+       local econfargs=(
+               --enable-man
+               --enable-shared
+               --with-grub2-mkconfig-path=grub-mkconfig
+               --with-modern-grub
+               $(use_with archive libarchive)
+               $(use_with curl)
+               $(use_with dracut dracut yesbutnoconf) #816867
+               $(use_enable doc gtk-doc)
+               $(usex introspection --enable-introspection={,} yes no)
+               $(use_with gpg gpgme)
+               $(use_enable http2)
+               $(use_enable httpd trivial-httpd-cmdline)
+               $(use_with selinux )
+               $(use_with soup soup3)
+               --without-soup # libsoup:2.4
+               $(use_with libmount)
+               $(use ssl && { use gnutls && echo --with-crypto=gnutls || echo 
--with-crypto=openssl; })
+               $(use_with sodium ed25519-libsodium)
+               $(use_with systemd libsystemd)
+               $(use_with zeroconf avahi)
+       )
+
+       if use systemd; then
+               econfargs+=( 
--with-systemdsystemunitdir="$(systemd_get_systemunitdir)" )
+       fi
+
+       unset ${!XDG_*} #657346 g-ir-scanner sandbox violation
+       econf "${econfargs[@]}"
+}
+
+src_install() {
+       default
+       find "${D}" -name '*.la' -delete || die
+}
+
+pkg_postinst() {
+       tmpfiles_process ostree-tmpfiles.conf
+}

Reply via email to