From: Boyuan Yang Date: Tue, 11 Feb 2025 00:00:36 +0000 (-0500) Subject: New upstream version 5.7.9 X-Git-Tag: archive/raspbian/5.7.12-2+rpi1^2~3^2~2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=17c7f8ea538304aebcaf63b2171ab98bd881f741;p=dtkcore.git New upstream version 5.7.9 --- diff --git a/debian/changelog b/debian/changelog index 68b83c2..3861173 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,37 @@ +dtkcore (5.7.9) unstable; urgency=medium + + [ root ] + * UNRELEASED + + -- Deepin Packages Builder Thu, 23 Jan 2025 09:07:08 +0000 + +dtkcore (5.7.8) unstable; urgency=medium + + [ root ] + * UNRELEASED + + -- Deepin Packages Builder Tue, 14 Jan 2025 11:17:31 +0000 + +dtkcore (5.7.7) unstable; urgency=medium + + [ root ] + * UNRELEASED + + -- Deepin Packages Builder Thu, 09 Jan 2025 09:28:38 +0000 + +dtkcore (5.7.6) unstable; urgency=medium + + [ root ] + * UNRELEASED + + -- Deepin Packages Builder Thu, 02 Jan 2025 05:43:52 +0000 + +dtkcore (5.7.5) unstable; urgency=medium + + * fix: pidfd leak + + -- Deepin Packages Builder Thu, 12 Dec 2024 03:03:54 +0000 + dtkcore (5.7.4) unstable; urgency=medium * fix: hasVtable is incorrect when destructing diff --git a/src/dconfigfile.cpp b/src/dconfigfile.cpp index 896248a..6a7da03 100644 --- a/src/dconfigfile.cpp +++ b/src/dconfigfile.cpp @@ -1288,12 +1288,22 @@ public: return cache->setValue(key, value, configMeta->serial(key), cache->uid(), appid); // convert copy to meta's type, it promises `setValue` don't change meta's type. + // canConvert isn't explicit, e.g: QString is also can convert to double. auto copy = value; if (!copy.convert(metaValue.metaType())) { qCWarning(cfLog) << "check type error, meta type is " << metaValue.metaType().name() << ", and now type is " << value.metaType().name(); return false; } + + // TODO it's a bug of qt, MetaType of 1.0 is qlonglong instead of double in json file. + static const QVector filterConvertType { + QMetaType{QMetaType::Double} + }; + // reset to origin value. + if (filterConvertType.contains(value.metaType())) { + copy = value; + } #else if (metaValue.type() == value.type()) return cache->setValue(key, value, configMeta->serial(key), cache->uid(), appid); @@ -1304,6 +1314,13 @@ public: << ", and now type is " << value.type(); return false; } + + static const QVector filterConvertType { + QVariant::Double + }; + if (filterConvertType.contains(value.type())) { + copy = value; + } #endif return cache->setValue(key, copy, configMeta->serial(key), cache->uid(), appid); diff --git a/src/dsgapplication.cpp b/src/dsgapplication.cpp index 2c8a20c..eafabee 100644 --- a/src/dsgapplication.cpp +++ b/src/dsgapplication.cpp @@ -100,7 +100,7 @@ QByteArray DSGApplication::getId(qint64 pid) int pidfd = syscall(SYS_pidfd_open, pid, 0); if (pidfd < 0) { - qCWarning(dsgApp) << "pidfd open failed:" << strerror(errno); + qCWarning(dsgApp) << "pidfd open failed:" << strerror(errno) << ", the pid:" << pid; return QByteArray(); } @@ -109,6 +109,8 @@ QByteArray DSGApplication::getId(qint64 pid) "org.desktopspec.ApplicationManager1"); QDBusReply reply = infc.call("Identify", QVariant::fromValue(QDBusUnixFileDescriptor(pidfd))); + // see QDBusUnixFileDescriptor: The original file descriptor is not touched and must be closed by the user. + close(pidfd); if (!reply.isValid()) { qCWarning(dsgApp) << "Identify from AM failed." << reply.error().message(); diff --git a/tests/data/dconf-example.meta.json b/tests/data/dconf-example.meta.json index abe786f..4063fab 100755 --- a/tests/data/dconf-example.meta.json +++ b/tests/data/dconf-example.meta.json @@ -40,6 +40,14 @@ "permissions": "readwrite", "visibility": "public" }, + "numberDouble": { + "value": 1.0, + "serial": 0, + "flags": ["global"], + "name": "double value type", + "permissions": "readwrite", + "visibility": "public" + }, "array": { "value": ["value1", "value2"], "serial": 0, diff --git a/tests/ut_dconfigfile.cpp b/tests/ut_dconfigfile.cpp index 8b301ce..9efb5d2 100644 --- a/tests/ut_dconfigfile.cpp +++ b/tests/ut_dconfigfile.cpp @@ -124,6 +124,11 @@ TEST_F(ut_DConfigFile, setValueTypeCheck) { ASSERT_FALSE(config.setValue("number", "1ab", "test", userCache.get())); ASSERT_EQ(config.value("number", userCache.get()).type(), type); } + { + const auto type = config.value("numberDouble", userCache.get()).type(); + ASSERT_TRUE(config.setValue("numberDouble", 1.2, "test", userCache.get())); + ASSERT_EQ(config.value("numberDouble", userCache.get()), 1.2); + } { const auto type = config.value("array", userCache.get()).type(); const QStringList array{"value1", "value2"};