summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/kernel/qmetatype.h2
-rw-r--r--tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp27
2 files changed, 28 insertions, 1 deletions
diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h
index 3b8f8e7166..899a51173e 100644
--- a/src/corelib/kernel/qmetatype.h
+++ b/src/corelib/kernel/qmetatype.h
@@ -1226,7 +1226,7 @@ public:
inline void destroyIter() { _destroyIter(&_iterator); }
- inline VariantData getCurrentKey() const { return _getKey(&_iterator, _metaType_id_key, _metaType_flags_value); }
+ inline VariantData getCurrentKey() const { return _getKey(&_iterator, _metaType_id_key, _metaType_flags_key); }
inline VariantData getCurrentValue() const { return _getValue(&_iterator, _metaType_id_value, _metaType_flags_value); }
inline void find(const VariantData &key)
diff --git a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
index c91bb21399..f2f3baae6b 100644
--- a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
+++ b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
@@ -280,6 +280,8 @@ private slots:
void compareSanity_data();
void compareSanity();
+ void accessSequentialContainerKey();
+
private:
void dataStream_data(QDataStream::Version version);
void loadQVariantFromDataStream(QDataStream::Version version);
@@ -4733,5 +4735,30 @@ void tst_QVariant::compareSanity()
}
}
+void tst_QVariant::accessSequentialContainerKey()
+{
+ QString nameResult;
+
+ {
+ QMap<QString, QObject*> mapping;
+ QString name = QString::fromLatin1("Seven");
+ mapping.insert(name, Q_NULLPTR);
+
+ QVariant variant = QVariant::fromValue(mapping);
+
+ QAssociativeIterable iterable = variant.value<QAssociativeIterable>();
+ QAssociativeIterable::const_iterator iit = iterable.begin();
+ const QAssociativeIterable::const_iterator end = iterable.end();
+ for ( ; iit != end; ++iit) {
+ nameResult += iit.key().toString();
+ }
+ } // Destroy mapping
+ // Regression test for QTBUG-52246 - no memory corruption/double deletion
+ // of the string key.
+
+ QCOMPARE(nameResult, QStringLiteral("Seven"));
+}
+
+
QTEST_MAIN(tst_QVariant)
#include "tst_qvariant.moc"