Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package dqlite for openSUSE:Factory checked 
in at 2026-06-05 14:58:01
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/dqlite (Old)
 and      /work/SRC/openSUSE:Factory/.dqlite.new.2375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "dqlite"

Fri Jun  5 14:58:01 2026 rev:17 rq:1357126 version:1.18.6

Changes:
--------
--- /work/SRC/openSUSE:Factory/dqlite/dqlite.changes    2026-03-02 
17:45:37.844516821 +0100
+++ /work/SRC/openSUSE:Factory/.dqlite.new.2375/dqlite.changes  2026-06-05 
14:58:58.413014564 +0200
@@ -1,0 +2,8 @@
+Wed Jun  3 05:00:00 UTC 2026 - Andreas Stieger <[email protected]>
+
+- Update to 1.18.6:
+  * set SOCK_CLOEXEC on socket creation to prevent FD leak to child
+    processes
+  * fix null deref when stopping or handing over before start
+
+-------------------------------------------------------------------

Old:
----
  dqlite-1.18.5.tar.gz

New:
----
  dqlite-1.18.6.tar.gz

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

Other differences:
------------------
++++++ dqlite.spec ++++++
--- /var/tmp/diff_new_pack.NxOEPl/_old  2026-06-05 14:58:59.329052447 +0200
+++ /var/tmp/diff_new_pack.NxOEPl/_new  2026-06-05 14:58:59.329052447 +0200
@@ -2,7 +2,7 @@
 # spec file for package dqlite
 #
 # Copyright (c) 2026 SUSE LLC and contributors
-# Copyright (c) 2024 Andreas Stieger <[email protected]>
+# Copyright (c) 2026 Andreas Stieger <[email protected]>
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -19,7 +19,7 @@
 
 %define lname libdqlite0
 Name:           dqlite
-Version:        1.18.5
+Version:        1.18.6
 Release:        0
 Summary:        Distributed SQLite
 License:        LGPL-3.0-only WITH LGPL-3.0-linking-exception
@@ -80,7 +80,7 @@
 %ldconfig_scriptlets -n %{lname}
 
 %check
-make check %{?_smp_mflags}
+%make_build check
 
 %files devel
 %license LICENSE

++++++ dqlite-1.18.5.tar.gz -> dqlite-1.18.6.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dqlite-1.18.5/configure.ac 
new/dqlite-1.18.6/configure.ac
--- old/dqlite-1.18.5/configure.ac      2026-01-26 09:03:58.000000000 +0100
+++ new/dqlite-1.18.6/configure.ac      2026-04-20 12:33:02.000000000 +0200
@@ -1,5 +1,5 @@
 AC_PREREQ(2.60)
-AC_INIT([libdqlite], [1.18.5], [https://github.com/canonical/dqlite])
+AC_INIT([libdqlite], [1.18.6], [https://github.com/canonical/dqlite])
 AC_CONFIG_MACRO_DIR([m4])
 AC_CONFIG_AUX_DIR([ac])
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dqlite-1.18.5/include/dqlite.h 
new/dqlite-1.18.6/include/dqlite.h
--- old/dqlite-1.18.5/include/dqlite.h  2026-01-26 09:03:58.000000000 +0100
+++ new/dqlite-1.18.6/include/dqlite.h  2026-04-20 12:33:02.000000000 +0200
@@ -32,7 +32,7 @@
  */
 #define DQLITE_VERSION_MAJOR 1
 #define DQLITE_VERSION_MINOR 18
-#define DQLITE_VERSION_RELEASE 5
+#define DQLITE_VERSION_RELEASE 6
 #define DQLITE_VERSION_NUMBER                                            \
        (DQLITE_VERSION_MAJOR * 100 * 100 + DQLITE_VERSION_MINOR * 100 + \
         DQLITE_VERSION_RELEASE)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dqlite-1.18.5/src/server.c 
new/dqlite-1.18.6/src/server.c
--- old/dqlite-1.18.5/src/server.c      2026-01-26 09:03:58.000000000 +0100
+++ new/dqlite-1.18.6/src/server.c      2026-04-20 12:33:02.000000000 +0200
@@ -244,15 +244,10 @@
        }
        domain = addr->sa_family;
 
-       fd = socket(domain, SOCK_STREAM, 0);
+       fd = socket(domain, SOCK_STREAM | SOCK_CLOEXEC, 0);
        if (fd == -1) {
                return DQLITE_ERROR;
        }
-       rv = fcntl(fd, FD_CLOEXEC);
-       if (rv != 0) {
-               close(fd);
-               return DQLITE_ERROR;
-       }
 
        if (domain == AF_INET || domain == AF_INET6) {
                int reuse = 1;
@@ -872,6 +867,10 @@
 {
        int rv;
 
+       if (!d->running) {
+               return DQLITE_MISUSE;
+       }
+
        rv = uv_async_send(&d->handover);
        dqlite_assert(rv == 0);
 
@@ -886,6 +885,10 @@
        void *result;
        int rv;
 
+       if (!d->running) {
+               return DQLITE_MISUSE;
+       }
+
        /* Prevents using @d multiple times from different contexts */
        if (d->lock_fd == -EBADF) {
            return EBADF;
@@ -1111,7 +1114,7 @@
        struct client_node_info info;
 
        version_str = p;
-       nl = memchr(p, '\n', (size_t)(end - version_str));
+       nl = (char*)memchr(p, '\n', (size_t)(end - version_str));
        if (nl == NULL) {
                return 1;
        }
@@ -1123,7 +1126,7 @@
 
        while (p != end) {
                addr = p;
-               nl = memchr(p, '\n', (size_t)(end - addr));
+               nl = (char*)memchr(p, '\n', (size_t)(end - addr));
                if (nl == NULL) {
                        return 1;
                }
@@ -1131,7 +1134,7 @@
                p = nl + 1;
 
                id_str = p;
-               nl = memchr(p, '\n', (size_t)(end - id_str));
+               nl = (char*)memchr(p, '\n', (size_t)(end - id_str));
                if (nl == NULL) {
                        return 1;
                }
@@ -1150,7 +1153,7 @@
                }
 
                role_str = p;
-               nl = memchr(p, '\n', (size_t)(end - role_str));
+               nl = (char*)memchr(p, '\n', (size_t)(end - role_str));
                if (nl == NULL) {
                        return 1;
                }
@@ -1247,7 +1250,7 @@
        unsigned long long id;
 
        version_str = p;
-       nl = memchr(version_str, '\n', (size_t)(end - version_str));
+       nl = (char*)memchr(version_str, '\n', (size_t)(end - version_str));
        if (nl == NULL) {
                return 1;
        }
@@ -1258,7 +1261,7 @@
        }
 
        addr = p;
-       nl = memchr(addr, '\n', (size_t)(end - addr));
+       nl = (char*)memchr(addr, '\n', (size_t)(end - addr));
        if (nl == NULL) {
                return 1;
        }
@@ -1266,7 +1269,7 @@
        p = nl + 1;
 
        id_str = p;
-       nl = memchr(id_str, '\n', (size_t)(end - id_str));
+       nl = (char*)memchr(id_str, '\n', (size_t)(end - id_str));
        if (nl == NULL) {
                return 1;
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dqlite-1.18.5/src/transport.c 
new/dqlite-1.18.6/src/transport.c
--- old/dqlite-1.18.5/src/transport.c   2026-01-26 09:03:58.000000000 +0100
+++ new/dqlite-1.18.6/src/transport.c   2026-04-20 12:33:02.000000000 +0200
@@ -223,7 +223,7 @@
        }
 
        dqlite_assert(addr->sa_family == AF_INET || addr->sa_family == 
AF_INET6);
-       *fd = socket(addr->sa_family, SOCK_STREAM, 0);
+       *fd = socket(addr->sa_family, SOCK_STREAM | SOCK_CLOEXEC, 0);
        if (*fd == -1) {
                return RAFT_NOCONNECTION;
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dqlite-1.18.5/test/integration/test_node.c 
new/dqlite-1.18.6/test/integration/test_node.c
--- old/dqlite-1.18.5/test/integration/test_node.c      2026-01-26 
09:03:58.000000000 +0100
+++ new/dqlite-1.18.6/test/integration/test_node.c      2026-04-20 
12:33:02.000000000 +0200
@@ -160,7 +160,43 @@
        munit_assert_int(rv, ==, 0);
 
        rv = dqlite_node_stop(f->node);
-       munit_assert_int(rv, ==, EBADF);
+       munit_assert_int(rv, ==, DQLITE_MISUSE);
+
+       return MUNIT_OK;
+}
+
+TEST(node, stopBeforeStart, setUpLocal, tearDown, 0, node_params)
+{
+       struct fixture *f = data;
+       int rv;
+
+       rv = dqlite_node_stop(f->node);
+       munit_assert_int(rv, ==, DQLITE_MISUSE);
+
+       rv = dqlite_node_start(f->node);
+       munit_assert_int(rv, ==, DQLITE_OK);
+       rv = dqlite_node_stop(f->node);
+       munit_assert_int(rv, ==, DQLITE_OK);
+
+       return MUNIT_OK;
+}
+
+TEST(node, handoverBeforeStart, setUpLocal, tearDown, 0, node_params)
+{
+       struct fixture *f = data;
+       int rv;
+
+       rv = dqlite_node_handover(f->node);
+       munit_assert_int(rv, ==, DQLITE_MISUSE);
+
+       rv = dqlite_node_start(f->node);
+       munit_assert_int(rv, ==, DQLITE_OK);
+
+       rv = dqlite_node_handover(f->node);
+       munit_assert_int(rv, ==, DQLITE_ERROR); // Can't handover in a single 
node cluster!
+
+       rv = dqlite_node_stop(f->node);
+       munit_assert_int(rv, ==, DQLITE_OK);
 
        return MUNIT_OK;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dqlite-1.18.5/test/lib/endpoint.c 
new/dqlite-1.18.6/test/lib/endpoint.c
--- old/dqlite-1.18.5/test/lib/endpoint.c       2026-01-26 09:03:58.000000000 
+0100
+++ new/dqlite-1.18.6/test/lib/endpoint.c       2026-04-20 12:33:02.000000000 
+0200
@@ -144,13 +144,13 @@
        }
 
        /* Accept the client connection. */
-       fd = accept(e->fd, address, &size);
+       fd = accept4(e->fd, address, &size, SOCK_CLOEXEC);
        if (fd < 0) {
                /* Check if the endpoint has been closed, so this is benign. */
                if (errno == EBADF || errno == EINVAL || errno == ENOTSOCK) {
                        return -1;
                }
-               munit_errorf("accept(): %s", strerror(errno));
+               munit_errorf("accept4(): %s", strerror(errno));
        }
 
        /* Set non-blocking mode */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dqlite-1.18.5/test/lib/server.c 
new/dqlite-1.18.6/test/lib/server.c
--- old/dqlite-1.18.5/test/lib/server.c 2026-01-26 09:03:58.000000000 +0100
+++ new/dqlite-1.18.6/test/lib/server.c 2026-04-20 12:33:02.000000000 +0200
@@ -13,7 +13,7 @@
        memset(&addr, 0, sizeof addr);
        addr.sun_family = AF_UNIX;
        strcpy(addr.sun_path + 1, address + 1);
-       *fd = socket(AF_UNIX, SOCK_STREAM, 0);
+       *fd = socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0);
        munit_assert_int(*fd, !=, -1);
        rv = connect(*fd, (struct sockaddr *)&addr,
                     sizeof(sa_family_t) + strlen(address + 1) + 1);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dqlite-1.18.5/test/raft/lib/tcp.c 
new/dqlite-1.18.6/test/raft/lib/tcp.c
--- old/dqlite-1.18.5/test/raft/lib/tcp.c       2026-01-26 09:03:58.000000000 
+0100
+++ new/dqlite-1.18.6/test/raft/lib/tcp.c       2026-04-20 12:33:02.000000000 
+0200
@@ -69,9 +69,9 @@
 
     size = sizeof(address);
 
-    socket = accept(s->socket, (struct sockaddr *)&address, &size);
+    socket = accept4(s->socket, (struct sockaddr *)&address, &size, 
SOCK_CLOEXEC);
     if (socket < 0) {
-        munit_errorf("tcp server: accept(): %s", strerror(errno));
+        munit_errorf("tcp server: accept4(): %s", strerror(errno));
     }
 
     return socket;
@@ -227,9 +227,9 @@
 
     size = sizeof(address);
 
-    socket = accept(t->server.socket, (struct sockaddr *)&address, &size);
+    socket = accept4(t->server.socket, (struct sockaddr *)&address, &size, 
SOCK_CLOEXEC);
     if (socket < 0) {
-        munit_errorf("tcp: accept(): %s", strerror(errno));
+        munit_errorf("tcp: accept4(): %s", strerror(errno));
     }
 
     return socket;

Reply via email to