diff --git a/kded/serializer.cpp b/kded/serializer.cpp --- a/kded/serializer.cpp +++ b/kded/serializer.cpp @@ -55,6 +55,9 @@ QString Serializer::configId(const KScreen::ConfigPtr ¤tConfig) { + if (!currentConfig) { + return QString(); + } KScreen::OutputList outputs = currentConfig->outputs(); QStringList hashList; @@ -92,6 +95,7 @@ QFile file(configFileName(id)); if (!file.open(QIODevice::ReadOnly)) { + qCDebug(KSCREEN_KDED) << "failed to open file" << id; return KScreen::ConfigPtr(); } @@ -136,6 +140,9 @@ bool Serializer::saveConfig(const KScreen::ConfigPtr &config, const QString &configId) { + if (!config || configId.isEmpty()) { + return false; + } const KScreen::OutputList outputs = config->outputs(); QVariantList outputList; diff --git a/tests/kded/serializertest.cpp b/tests/kded/serializertest.cpp --- a/tests/kded/serializertest.cpp +++ b/tests/kded/serializertest.cpp @@ -43,6 +43,7 @@ void testCorruptConfig(); void testCorruptEmptyConfig(); void testCorruptUselessConfig(); + void testNullConfig(); private: KScreen::ConfigPtr createConfig(bool output1Connected, bool output2Conected); @@ -240,6 +241,22 @@ QVERIFY(config->isValid()); } +void TestSerializer::testNullConfig() +{ + KScreen::ConfigPtr nullConfig; + QVERIFY(!nullConfig); + + // Null configs have empty configIds + QVERIFY(Serializer::configId(nullConfig).isEmpty()); + + // Load config from a file not found results in a nullptr + KScreen::ConfigPtr config = createConfig(true, true); + QVERIFY(!Serializer::config(config, QString())); + + // Wrong config file name should fail to save + QCOMPARE(Serializer::saveConfig(config, QString()), false); +} + QTEST_MAIN(TestSerializer) #include "serializertest.moc" \ No newline at end of file