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); },
