Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package libuv for openSUSE:Factory checked 
in at 2026-03-07 20:00:51
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libuv (Old)
 and      /work/SRC/openSUSE:Factory/.libuv.new.8177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libuv"

Sat Mar  7 20:00:51 2026 rev:39 rq:1336813 version:1.52.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/libuv/libuv.changes      2025-08-04 
15:22:17.455557435 +0200
+++ /work/SRC/openSUSE:Factory/.libuv.new.8177/libuv.changes    2026-03-07 
20:00:55.345533687 +0100
@@ -1,0 +2,15 @@
+Thu Mar  5 20:18:58 UTC 2026 - Dirk Müller <[email protected]>
+
+- add fix-crash-if-poll-callback-closes.patch
+
+-------------------------------------------------------------------
+Wed Feb 18 12:20:08 UTC 2026 - Felix Stegmeier <[email protected]>
+
+- libuv.keyring: added keyid 5804F9998A922AFB
+    Colin Ihrig <[email protected]>
+
+- Update to 1.52.0:
+  * Bugfix release
+  * tcp: support customizing TCP_KEEPINTVL and TCP_KEEPCNT
+
+-------------------------------------------------------------------

Old:
----
  libuv-v1.51.0.tar.gz
  libuv-v1.51.0.tar.gz.sign

New:
----
  fix-crash-if-poll-callback-closes.patch
  libuv-v1.52.0.tar.gz
  libuv-v1.52.0.tar.gz.sign

----------(New B)----------
  New:
- add fix-crash-if-poll-callback-closes.patch
----------(New E)----------

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

Other differences:
------------------
++++++ libuv.spec ++++++
--- /var/tmp/diff_new_pack.XLjZFG/_old  2026-03-07 20:00:56.309573488 +0100
+++ /var/tmp/diff_new_pack.XLjZFG/_new  2026-03-07 20:00:56.313573653 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package libuv
 #
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 %define somajor 1
 Name:           libuv
-Version:        1.51.0
+Version:        1.52.0
 Release:        0
 Summary:        Asychronous I/O support library
 License:        MIT
@@ -29,6 +29,8 @@
 Source2:        %{name}.keyring
 Source3:        baselibs.conf
 Patch1:         fix_tests.patch
+# PATCH-FIX-UPSTREAM: https://github.com/libuv/libuv/pull/5039
+Patch2:         fix-crash-if-poll-callback-closes.patch
 BuildRequires:  autoconf
 BuildRequires:  automake
 BuildRequires:  libtool

++++++ fix-crash-if-poll-callback-closes.patch ++++++
>From 327be9eec853bbc67f08682d3c43b70fc45aabee Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Juan=20Jos=C3=A9=20Arboleda?= <[email protected]>
Date: Mon, 2 Mar 2026 12:28:44 -0500
Subject: [PATCH] linux: fix crash if poll callback closes handle before
 `POLLERR`
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Previously, `uv__udp_io` would proceed to call `uv__udp_recvmsg` for
the `POLLERR` event even if the handle was just closed by the `POLLIN`
callback.

This commit adds a guard to verify the handle is still active before
processing the error queue. It also adds a regression test that
mimics this recursive closure behavior.

Fixes: https://github.com/libuv/libuv/issues/5030
Signed-off-by: Juan José Arboleda <[email protected]>
---
 CMakeLists.txt                        |   1 +
 Makefile.am                           |   1 +
 src/unix/udp.c                        |   6 +-
 test/test-list.h                      |   4 +
 test/test-udp-recv-cb-close-pollerr.c | 112 ++++++++++++++++++++++++++
 5 files changed, 123 insertions(+), 1 deletion(-)
 create mode 100644 test/test-udp-recv-cb-close-pollerr.c

Index: libuv-v1.52.0/CMakeLists.txt
===================================================================
--- libuv-v1.52.0.orig/CMakeLists.txt
+++ libuv-v1.52.0/CMakeLists.txt
@@ -700,6 +700,7 @@ if(LIBUV_BUILD_TESTS)
        test/test-udp-send-immediate.c
        test/test-udp-sendmmsg-error.c
        test/test-udp-send-unreachable.c
+       test/test-udp-recv-cb-close-pollerr.c
        test/test-udp-recvmsg-unreachable-error.c
        test/test-udp-try-send.c
        test/test-udp-recv-in-a-row.c
Index: libuv-v1.52.0/Makefile.am
===================================================================
--- libuv-v1.52.0.orig/Makefile.am
+++ libuv-v1.52.0/Makefile.am
@@ -325,6 +325,7 @@ test_run_tests_SOURCES = test/blackhole-
                          test/test-udp-send-immediate.c \
                          test/test-udp-sendmmsg-error.c \
                          test/test-udp-send-unreachable.c \
+                         test/test-udp-recv-cb-close-pollerr.c \
                          test/test-udp-recvmsg-unreachable-error.c \
                          test/test-udp-try-send.c \
                          test/test-udp-recv-in-a-row.c \
Index: libuv-v1.52.0/src/unix/udp.c
===================================================================
--- libuv-v1.52.0.orig/src/unix/udp.c
+++ libuv-v1.52.0/src/unix/udp.c
@@ -183,7 +183,11 @@ void uv__udp_io(uv_loop_t* loop, uv__io_
 
   /* Just Linux support for now. */
 #if defined(__linux__)
-  if (revents & POLLERR)
+  /* Guard against the case where the POLLIN callback above (e.g. via
+   * uv_udp_recv_stop + uv_close) already cleared recv_cb in the same
+   * revents iteration.  uv__udp_recvmsg asserts recv_cb != NULL, so
+   * calling it with a NULL recv_cb would be wrong regardless of POLLERR. */
+  if ((revents & POLLERR) && uv__is_active(handle))
     uv__udp_recvmsg(handle, MSG_ERRQUEUE);
 #endif
 
Index: libuv-v1.52.0/test/test-list.h
===================================================================
--- libuv-v1.52.0.orig/test/test-list.h
+++ libuv-v1.52.0/test/test-list.h
@@ -174,8 +174,10 @@ TEST_DECLARE   (udp_send_and_recv)
 TEST_DECLARE   (udp_send_hang_loop)
 TEST_DECLARE   (udp_send_immediate)
 TEST_DECLARE   (udp_send_unreachable)
+TEST_DECLARE   (udp_recv_cb_close_pollerr)
 TEST_DECLARE   (udp_recvmsg_unreachable_error)
 TEST_DECLARE   (udp_recvmsg_unreachable_error6)
+TEST_DECLARE   (udp_send_pollerr_no_recv)
 TEST_DECLARE   (udp_mmsg)
 TEST_DECLARE   (udp_multicast_ttl)
 TEST_DECLARE   (udp_dgram_too_big)
@@ -802,8 +804,10 @@ TASK_LIST_START
   TEST_ENTRY  (udp_send_hang_loop)
   TEST_ENTRY  (udp_send_immediate)
   TEST_ENTRY  (udp_send_unreachable)
+  TEST_ENTRY  (udp_recv_cb_close_pollerr)
   TEST_ENTRY  (udp_recvmsg_unreachable_error)
   TEST_ENTRY  (udp_recvmsg_unreachable_error6)
+  TEST_ENTRY  (udp_send_pollerr_no_recv)
   TEST_ENTRY  (udp_dgram_too_big)
   TEST_ENTRY  (udp_dual_stack)
   TEST_ENTRY  (udp_ipv6_only)
Index: libuv-v1.52.0/test/test-udp-recv-cb-close-pollerr.c
===================================================================
--- /dev/null
+++ libuv-v1.52.0/test/test-udp-recv-cb-close-pollerr.c
@@ -0,0 +1,112 @@
+/* Copyright libuv contributors. All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+#include "uv.h"
+#include "task.h"
+
+static uv_udp_send_t send_req;
+static uv_udp_t client;
+static int alloc_cb_called;
+static int recv_cb_called;
+static int send_cb_called;
+
+static void alloc_cb(uv_handle_t* handle, size_t sz, uv_buf_t* buf) {
+  alloc_cb_called++;
+  buf->base = "uv";
+  buf->len = 2;
+}
+
+static void recv_cb(uv_udp_t* handle, ssize_t nread, const uv_buf_t* buf,
+                    const struct sockaddr* addr, unsigned flags) {
+  recv_cb_called++;
+  /* Stop receiving and unset recv_cb and alloc_cb */
+  uv_close((uv_handle_t*) handle, NULL);
+}
+
+static void send_cb(uv_udp_send_t* req, int status) {
+  send_cb_called++;
+  /* The send completed; now just close the handle and let the loop drain.
+   * If a POLLERR arrives before the close completes, uv__udp_io must not
+   * crash when no recv callback is installed. */
+  uv_close((uv_handle_t*) req->handle, NULL);
+}
+
+/* Refs: https://github.com/libuv/libuv/issues/5030 */
+TEST_IMPL(udp_recv_cb_close_pollerr) {
+#ifndef __linux__
+  RETURN_SKIP("ICMP error handling is Linux-specific");
+#endif
+  struct sockaddr_in any_addr;
+  struct sockaddr_in addr;
+  uv_buf_t buf;
+
+  ASSERT_OK(uv_udp_init(uv_default_loop(), &client));
+
+  ASSERT_OK(uv_ip4_addr("0.0.0.0", 0, &any_addr));
+  ASSERT_OK(uv_udp_bind(&client, (const struct sockaddr*) &any_addr,
+                        UV_UDP_LINUX_RECVERR));
+
+  ASSERT_OK(uv_ip4_addr("127.0.0.1", 9999, &addr));
+  ASSERT_OK(uv_udp_connect(&client, (const struct sockaddr*) &addr));
+
+  ASSERT_OK(uv_udp_recv_start(&client, alloc_cb, recv_cb));
+
+  buf = uv_buf_init("PING", 4);
+  ASSERT_GT(uv_udp_try_send(&client, &buf, 1, NULL), 0);
+
+  uv_run(uv_default_loop(), UV_RUN_DEFAULT);
+
+  ASSERT_EQ(1, alloc_cb_called);
+  ASSERT_EQ(1, recv_cb_called);
+
+  MAKE_VALGRIND_HAPPY(uv_default_loop());
+  return 0;
+}
+
+/* Same as above but WITHOUT uv_udp_recv_start.
+ * The ICMP POLLERR still fires on the fd; uv__udp_io must not crash when
+ * no recv/alloc callback is installed. */
+TEST_IMPL(udp_send_pollerr_no_recv) {
+#ifndef __linux__
+  RETURN_SKIP("ICMP error handling is Linux-specific");
+#endif
+  struct sockaddr_in any_addr;
+  struct sockaddr_in addr;
+  uv_buf_t buf;
+
+  ASSERT_OK(uv_udp_init(uv_default_loop(), &client));
+
+  ASSERT_OK(uv_ip4_addr("0.0.0.0", 0, &any_addr));
+  ASSERT_OK(uv_udp_bind(&client, (const struct sockaddr*) &any_addr,
+                        UV_UDP_LINUX_RECVERR));
+
+  ASSERT_OK(uv_ip4_addr("127.0.0.1", 9999, &addr));
+  ASSERT_OK(uv_udp_connect(&client, (const struct sockaddr*) &addr));
+
+  buf = uv_buf_init("PING", 4);
+  ASSERT_OK(uv_udp_send(&send_req, &client, &buf, 1, NULL, send_cb));
+
+  uv_run(uv_default_loop(), UV_RUN_DEFAULT);
+
+  ASSERT_EQ(1, send_cb_called);
+
+  MAKE_VALGRIND_HAPPY(uv_default_loop());
+  return 0;
+}
\ No newline at end of file

++++++ fix_tests.patch ++++++
--- /var/tmp/diff_new_pack.XLjZFG/_old  2026-03-07 20:00:56.373576130 +0100
+++ /var/tmp/diff_new_pack.XLjZFG/_new  2026-03-07 20:00:56.377576295 +0100
@@ -2,11 +2,11 @@
  test/test-list.h |   11 -----------
  1 file changed, 11 deletions(-)
 
-Index: libuv-v1.47.0/test/test-list.h
+Index: libuv-v1.52.0/test/test-list.h
 ===================================================================
---- libuv-v1.47.0.orig/test/test-list.h
-+++ libuv-v1.47.0/test/test-list.h
-@@ -79,7 +79,6 @@ TEST_DECLARE   (stdio_over_pipes)
+--- libuv-v1.52.0.orig/test/test-list.h
++++ libuv-v1.52.0/test/test-list.h
+@@ -82,7 +82,6 @@ TEST_DECLARE   (stdio_over_pipes)
  TEST_DECLARE   (stdio_emulate_iocp)
  TEST_DECLARE   (ip6_pton)
  TEST_DECLARE   (ip6_sin6_len)
@@ -14,7 +14,7 @@
  TEST_DECLARE   (ipc_heavy_traffic_deadlock_bug)
  TEST_DECLARE   (ipc_listen_before_write)
  TEST_DECLARE   (ipc_listen_after_write)
-@@ -128,7 +127,6 @@ TEST_DECLARE   (tcp_bind_or_listen_error
+@@ -131,7 +130,6 @@ TEST_DECLARE   (tcp_bind_or_listen_error
  TEST_DECLARE   (tcp_listen_without_bind)
  TEST_DECLARE   (tcp_connect_error_fault)
  TEST_DECLARE   (tcp_connect6_error_fault)
@@ -22,9 +22,9 @@
  TEST_DECLARE   (tcp_connect_timeout)
  TEST_DECLARE   (tcp_local_connect_timeout)
  TEST_DECLARE   (tcp6_local_connect_timeout)
-@@ -173,11 +171,7 @@ TEST_DECLARE   (udp_send_hang_loop)
- TEST_DECLARE   (udp_send_immediate)
- TEST_DECLARE   (udp_send_unreachable)
+@@ -179,11 +177,7 @@ TEST_DECLARE   (udp_send_unreachable)
+ TEST_DECLARE   (udp_recvmsg_unreachable_error)
+ TEST_DECLARE   (udp_recvmsg_unreachable_error6)
  TEST_DECLARE   (udp_mmsg)
 -TEST_DECLARE   (udp_multicast_join)
 -TEST_DECLARE   (udp_multicast_join6)
@@ -34,7 +34,7 @@
  TEST_DECLARE   (udp_dgram_too_big)
  TEST_DECLARE   (udp_dual_stack)
  TEST_DECLARE   (udp_ipv6_only)
-@@ -643,7 +637,6 @@ TASK_LIST_START
+@@ -671,7 +665,6 @@ TASK_LIST_START
    TEST_ENTRY  (stdio_emulate_iocp)
    TEST_ENTRY  (ip6_pton)
    TEST_ENTRY  (ip6_sin6_len)
@@ -42,7 +42,7 @@
    TEST_ENTRY  (ipc_heavy_traffic_deadlock_bug)
    TEST_ENTRY  (ipc_listen_before_write)
    TEST_ENTRY  (ipc_listen_after_write)
-@@ -730,7 +723,6 @@ TASK_LIST_START
+@@ -758,7 +751,6 @@ TASK_LIST_START
    TEST_ENTRY  (tcp_listen_without_bind)
    TEST_ENTRY  (tcp_connect_error_fault)
    TEST_ENTRY  (tcp_connect6_error_fault)
@@ -50,7 +50,7 @@
    TEST_ENTRY  (tcp_connect_timeout)
    TEST_ENTRY  (tcp_local_connect_timeout)
    TEST_ENTRY  (tcp6_local_connect_timeout)
-@@ -787,10 +779,6 @@ TASK_LIST_START
+@@ -819,10 +811,6 @@ TASK_LIST_START
    TEST_ENTRY  (udp_options6)
    TEST_ENTRY  (udp_no_autobind)
    TEST_ENTRY  (udp_mmsg)
@@ -61,7 +61,7 @@
    TEST_ENTRY  (udp_multicast_ttl)
    TEST_ENTRY  (udp_sendmmsg_error)
    TEST_ENTRY  (udp_try_send)
-@@ -943,7 +931,6 @@ TASK_LIST_START
+@@ -978,7 +966,6 @@ TASK_LIST_START
  
    TEST_ENTRY  (getnameinfo_basic_ip4)
    TEST_ENTRY  (getnameinfo_basic_ip4_sync)

++++++ libuv-v1.51.0.tar.gz -> libuv-v1.52.0.tar.gz ++++++
++++ 7855 lines of diff (skipped)

++++++ libuv.keyring ++++++
--- /var/tmp/diff_new_pack.XLjZFG/_old  2026-03-07 20:00:56.805593967 +0100
+++ /var/tmp/diff_new_pack.XLjZFG/_new  2026-03-07 20:00:56.805593967 +0100
@@ -1,149 +1,53 @@
-tag pubkey-santigimeno
-Tagger: Santiago Gimeno <[email protected]>
-Date:   Fri Aug 26 12:23:55 2016 +0200
-
-build: check in public key
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1
-
-iQIcBAABAgAGBQJXwBi+AAoJEPKMPI2jPAO+2wIP/ipYYnDxVSbPnN41xvaCb0t0
-VIRq4POUIKf3moBXYWUwX4PrVWNy98/glvpqYB6vfaKkSalE15n8ny6UJPuCwMkc
-hWKB3+r4ck4nKjsBrqTGVtTf/0XvGFQs1uABEyJaP2WsBP3YVTwQY/nJvACrDCB0
-jGUAA5iOJLy5cw8Isi6gqZq0PLzZCrbgboIkSKmRJiK6Pn9BzpZ+3AbUfsrWaq2G
-Bhd02ftoqSMvdggBSCNIg6uVa4Lii3IoLmC1kcOC75jCx0dayImFSpVEY0I7Ld/o
-CFJN84fbLEmzL5bIizrXhyknLsNSeNoXA5ELdRJUf27P3+TP9s8Hzrl66T1hTbc6
-1/TaNQN4F/oLo7x8KwN7XFYn88qMM5Cq+Xo7MKKgsDRaL2+HSpfD+4PNRJjrbDTX
-wB7Xl79+TcM0JUc19R1SfRrdmk/sjGLJzCV0CkQGAv2yKTvvi6rJ7AbOw3jvKe+h
-Fkst10ZW5PoRubJp3RTJQDtw3J3ZmKNHMXkr3aN9HC8UKcdv4fxCvP1UH8vifT9n
-aWKq6uU/IFtx2NrnWGQDNBsxXkbmZlIWQIDOOQ/h1++MYG5eLhIqNhWH0RDS2g+K
-6QsN8r2t8j23NxGNj+ql7e3MjSDr+E3cePBFOoG4+OewOPjQqJ1n4XPSFGbh8GWq
-fH+ba0o16+0Dd3agnjf8
-=HWU5
------END PGP SIGNATURE-----
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1
-
-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
-=cVLK
------END PGP PUBLIC KEY BLOCK-----
 -----BEGIN PGP PUBLIC KEY BLOCK-----
 
-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
-=H+Ob
+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
+Sxngsi8VAg==
+=MKVg
 -----END PGP PUBLIC KEY BLOCK-----
 

Reply via email to