Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package libksysguard6 for openSUSE:Factory 
checked in at 2026-08-09 21:31:04
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libksysguard6 (Old)
 and      /work/SRC/openSUSE:Factory/.libksysguard6.new.16738 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libksysguard6"

Sun Aug  9 21:31:04 2026 rev:48 rq:1369882 version:6.7.4

Changes:
--------
--- /work/SRC/openSUSE:Factory/libksysguard6/libksysguard6.changes      
2026-07-17 01:37:11.584505094 +0200
+++ /work/SRC/openSUSE:Factory/.libksysguard6.new.16738/libksysguard6.changes   
2026-08-09 21:31:21.058020301 +0200
@@ -1,0 +2,10 @@
+Tue Aug  4 11:25:53 UTC 2026 - Fabian Vogt <[email protected]>
+
+- Update to 6.7.4:
+  * New bugfix release
+  * For more details see https://kde.org/announcements/plasma/6/6.7.4
+- Changes since 6.7.3:
+  * systemstats: don't keep dangling SensorObject pointers in SensorContainer 
(kde#523562)
+  * Update version for new release 6.7.4
+
+-------------------------------------------------------------------

Old:
----
  libksysguard-6.7.3.tar.xz
  libksysguard-6.7.3.tar.xz.sig

New:
----
  libksysguard-6.7.4.tar.xz
  libksysguard-6.7.4.tar.xz.sig

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

Other differences:
------------------
++++++ libksysguard6.spec ++++++
--- /var/tmp/diff_new_pack.uzD4nI/_old  2026-08-09 21:31:21.574037810 +0200
+++ /var/tmp/diff_new_pack.uzD4nI/_new  2026-08-09 21:31:21.574037810 +0200
@@ -28,7 +28,7 @@
 # Latest ABI-stable Plasma (e.g. 5.8 in KF6, but 5.8.95 in KUF)
 %{!?_plasma6_version: %define _plasma6_version %(echo %{_plasma6_bugfix} | awk 
-F. '{print $1"."$2}')}
 Name:           libksysguard6
-Version:        6.7.3
+Version:        6.7.4
 Release:        0
 Summary:        Task management and system monitoring library
 License:        GPL-2.0-or-later

++++++ libksysguard-6.7.3.tar.xz -> libksysguard-6.7.4.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libksysguard-6.7.3/CMakeLists.txt 
new/libksysguard-6.7.4/CMakeLists.txt
--- old/libksysguard-6.7.3/CMakeLists.txt       2026-07-14 12:56:58.000000000 
+0200
+++ new/libksysguard-6.7.4/CMakeLists.txt       2026-08-04 11:22:40.000000000 
+0200
@@ -2,7 +2,7 @@
 
 project(libksysguard)
 
-set(PROJECT_VERSION "6.7.3")
+set(PROJECT_VERSION "6.7.4")
 
 # check with non-Plasma consumers (e.g. KDevelop) before bumping these 
versions to make sure the KDE CI does not break
 set(QT_MIN_VERSION "6.10.0")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libksysguard-6.7.3/autotests/CMakeLists.txt 
new/libksysguard-6.7.4/autotests/CMakeLists.txt
--- old/libksysguard-6.7.3/autotests/CMakeLists.txt     2026-07-14 
12:56:58.000000000 +0200
+++ new/libksysguard-6.7.4/autotests/CMakeLists.txt     2026-08-04 
11:22:40.000000000 +0200
@@ -10,6 +10,7 @@
 ecm_add_test(sensortreemodeltest.cpp LINK_LIBRARIES Qt::Test Qt::DBus 
KSysGuard::Sensors)
 ecm_add_test(sensordatamodeltest.cpp LINK_LIBRARIES Qt::Test Qt::DBus 
KSysGuard::Sensors KSysGuard::Formatter)
 ecm_add_test(processdatamodeltest.cpp LINK_LIBRARIES Qt::Test 
KSysGuard::ProcessCore)
+ecm_add_test(sensorcontainertest.cpp LINK_LIBRARIES Qt::Test 
KSysGuard::SystemStats)
 ecm_add_test(cgrouptest.cpp LINK_LIBRARIES Qt::Test KF6::Service 
KSysGuard::ProcessCore)
 
 include_directories(../faces)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libksysguard-6.7.3/autotests/sensorcontainertest.cpp 
new/libksysguard-6.7.4/autotests/sensorcontainertest.cpp
--- old/libksysguard-6.7.3/autotests/sensorcontainertest.cpp    1970-01-01 
01:00:00.000000000 +0100
+++ new/libksysguard-6.7.4/autotests/sensorcontainertest.cpp    2026-08-04 
11:22:40.000000000 +0200
@@ -0,0 +1,85 @@
+/*
+    SPDX-FileCopyrightText: 2026 Méven Car <[email protected]>
+
+    SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include <QTest>
+
+#include "systemstats/SensorContainer.h"
+#include "systemstats/SensorObject.h"
+#include "systemstats/SensorPlugin.h"
+
+using namespace KSysGuard;
+
+class SensorContainerTest : public QObject
+{
+    Q_OBJECT
+private Q_SLOTS:
+    void deletedObjectIsRemovedFromContainer();
+    void destroyedHandlerDoesNotEvictReplacement();
+    void objectDeletedBeforeQueuedRegistration();
+};
+
+// A SensorObject deleted without going through aboutToBeRemoved/removeObject 
(as
+// happens when a plugin drops a device) must not leave a dangling pointer in 
its
+// container, or iterating objects() and reading their ids crashes (bug 
523562).
+void SensorContainerTest::deletedObjectIsRemovedFromContainer()
+{
+    SensorPlugin plugin(nullptr, {});
+    auto container = new SensorContainer(QStringLiteral("test"), 
QStringLiteral("Test"), &plugin);
+
+    auto object = new SensorObject(QStringLiteral("obj"), container);
+    // Registration with the container is queued from the constructor.
+    QTRY_COMPARE(container->objects().size(), 1);
+
+    delete object;
+
+    QCOMPARE(container->objects().size(), 0);
+    // The exact operation AggregateSensor::updateSensors() performs; a 
use-after-free
+    // before the fix.
+    for (auto obj : container->objects()) {
+        obj->id();
+    }
+}
+
+// The destroyed() cleanup keys on the object id, so it must compare identity 
and not
+// evict a replacement object that reused the same id.
+void SensorContainerTest::destroyedHandlerDoesNotEvictReplacement()
+{
+    SensorPlugin plugin(nullptr, {});
+    auto container = new SensorContainer(QStringLiteral("test"), 
QStringLiteral("Test"), &plugin);
+
+    auto first = new SensorObject(QStringLiteral("dup"), container);
+    QTRY_COMPARE(container->objects().size(), 1);
+
+    // Detach the first object (still alive), then register a replacement with 
the same id.
+    container->removeObject(first);
+    QCOMPARE(container->objects().size(), 0);
+
+    auto second = new SensorObject(QStringLiteral("dup"), container);
+    QTRY_COMPARE(container->object(QStringLiteral("dup")), second);
+
+    // Destroying the detached first object must not evict the replacement.
+    delete first;
+    QCOMPARE(container->object(QStringLiteral("dup")), second);
+}
+
+// A SensorObject deleted before its queued registration runs must not cause
+// addObject() to be called on a dangling pointer.
+void SensorContainerTest::objectDeletedBeforeQueuedRegistration()
+{
+    SensorPlugin plugin(nullptr, {});
+    auto container = new SensorContainer(QStringLiteral("test"), 
QStringLiteral("Test"), &plugin);
+
+    auto object = new SensorObject(QStringLiteral("ephemeral"), container);
+    delete object;
+
+    // Drain the event loop; the queued addObject() must have been discarded.
+    QTest::qWait(50);
+    QCOMPARE(container->objects().size(), 0);
+}
+
+QTEST_GUILESS_MAIN(SensorContainerTest)
+
+#include "sensorcontainertest.moc"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libksysguard-6.7.3/po/nn/processcore.po 
new/libksysguard-6.7.4/po/nn/processcore.po
--- old/libksysguard-6.7.3/po/nn/processcore.po 2026-07-14 12:56:58.000000000 
+0200
+++ new/libksysguard-6.7.4/po/nn/processcore.po 2026-08-04 11:22:40.000000000 
+0200
@@ -1,5 +1,6 @@
 # Translation of processcore to Norwegian Nynorsk
 #
+# Karl Ove Hufthammer <[email protected]>, 2007, 2008, 2010, 2019, 2020, 2023, 
2026.
 # Øystein Steffensen-Alværvik <[email protected]>, 2022.
 msgid ""
 msgstr ""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libksysguard-6.7.3/systemstats/SensorContainer.cpp 
new/libksysguard-6.7.4/systemstats/SensorContainer.cpp
--- old/libksysguard-6.7.3/systemstats/SensorContainer.cpp      2026-07-14 
12:56:58.000000000 +0200
+++ new/libksysguard-6.7.4/systemstats/SensorContainer.cpp      2026-08-04 
11:22:40.000000000 +0200
@@ -68,6 +68,12 @@
     connect(object, &SensorObject::aboutToBeRemoved, this, [this, object]() {
         removeObject(object);
     });
+
+    connect(object, &QObject::destroyed, this, [this, objectId](QObject 
*destroyedObject) {
+        if (d->sensorObjects.value(objectId) == destroyedObject) {
+            d->sensorObjects.remove(objectId);
+        }
+    });
 }
 
 void SensorContainer::removeObject(SensorObject *object)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libksysguard-6.7.3/systemstats/SensorObject.cpp 
new/libksysguard-6.7.4/systemstats/SensorObject.cpp
--- old/libksysguard-6.7.3/systemstats/SensorObject.cpp 2026-07-14 
12:56:58.000000000 +0200
+++ new/libksysguard-6.7.4/systemstats/SensorObject.cpp 2026-08-04 
11:22:40.000000000 +0200
@@ -36,7 +36,7 @@
 
     if (parent) {
         QMetaObject::invokeMethod(
-            parent,
+            this,
             [this, parent] {
                 parent->addObject(this);
             },

Reply via email to