diff options
-rw-r--r-- | src/corelib/io/qsettings.cpp | 8 | ||||
-rw-r--r-- | tests/auto/corelib/io/qsettings/tst_qsettings.cpp | 11 |
2 files changed, 19 insertions, 0 deletions
diff --git a/src/corelib/io/qsettings.cpp b/src/corelib/io/qsettings.cpp index fd35ae33dc..d896da176a 100644 --- a/src/corelib/io/qsettings.cpp +++ b/src/corelib/io/qsettings.cpp @@ -3121,6 +3121,10 @@ bool QSettings::isWritable() const void QSettings::setValue(const QString &key, const QVariant &value) { Q_D(QSettings); + if (key.isEmpty()) { + qWarning("QSettings::setValue: Empty key passed"); + return; + } QString k = d->actualKey(key); d->set(k, value); d->requestUpdate(); @@ -3253,6 +3257,10 @@ bool QSettings::event(QEvent *event) QVariant QSettings::value(const QString &key, const QVariant &defaultValue) const { Q_D(const QSettings); + if (key.isEmpty()) { + qWarning("QSettings::value: Empty key passed"); + return QVariant(); + } QVariant result = defaultValue; QString k = d->actualKey(key); d->get(k, &result); diff --git a/tests/auto/corelib/io/qsettings/tst_qsettings.cpp b/tests/auto/corelib/io/qsettings/tst_qsettings.cpp index 77a60997a6..3e68e4859f 100644 --- a/tests/auto/corelib/io/qsettings/tst_qsettings.cpp +++ b/tests/auto/corelib/io/qsettings/tst_qsettings.cpp @@ -118,6 +118,7 @@ private slots: void testUpdateRequestEvent(); void testThreadSafety(); void testEmptyData(); + void testEmptyKey(); void testResourceFiles(); void testRegistryShortRootNames(); void trailingWhitespace(); @@ -2025,6 +2026,16 @@ void tst_QSettings::testEmptyData() QFile::remove(filename); } +void tst_QSettings::testEmptyKey() +{ + QSettings settings; + QTest::ignoreMessage(QtWarningMsg, "QSettings::value: Empty key passed"); + const QVariant value = settings.value(QString()); + QCOMPARE(value, QVariant()); + QTest::ignoreMessage(QtWarningMsg, "QSettings::setValue: Empty key passed"); + settings.setValue(QString(), value); +} + void tst_QSettings::testResourceFiles() { QSettings settings(":/resourcefile.ini", QSettings::IniFormat); |