summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/json/qjsonvalue.cpp8
-rw-r--r--tests/auto/corelib/json/tst_qtjson.cpp4
2 files changed, 10 insertions, 2 deletions
diff --git a/src/corelib/json/qjsonvalue.cpp b/src/corelib/json/qjsonvalue.cpp
index a540626579..3fbc811948 100644
--- a/src/corelib/json/qjsonvalue.cpp
+++ b/src/corelib/json/qjsonvalue.cpp
@@ -384,9 +384,13 @@ QVariant QJsonValue::toVariant() const
case String:
return toString();
case Array:
- return QJsonArray(d, static_cast<QJsonPrivate::Array *>(base)).toVariantList();
+ return d ?
+ QJsonArray(d, static_cast<QJsonPrivate::Array *>(base)).toVariantList() :
+ QVariantList();
case Object:
- return QJsonObject(d, static_cast<QJsonPrivate::Object *>(base)).toVariantMap();
+ return d ?
+ QJsonObject(d, static_cast<QJsonPrivate::Object *>(base)).toVariantMap() :
+ QVariantMap();
case Null:
case Undefined:
break;
diff --git a/tests/auto/corelib/json/tst_qtjson.cpp b/tests/auto/corelib/json/tst_qtjson.cpp
index bdf8c86442..94e6e1129e 100644
--- a/tests/auto/corelib/json/tst_qtjson.cpp
+++ b/tests/auto/corelib/json/tst_qtjson.cpp
@@ -1062,6 +1062,8 @@ void tst_QtJson::fromVariantMap()
void tst_QtJson::toVariantMap()
{
+ QCOMPARE(QMetaType::Type(QJsonValue(QJsonObject()).toVariant().type()), QMetaType::QVariantMap); // QTBUG-32524
+
QJsonObject object;
QVariantMap map = object.toVariantMap();
QVERIFY(map.isEmpty());
@@ -1091,6 +1093,8 @@ void tst_QtJson::toVariantMap()
void tst_QtJson::toVariantList()
{
+ QCOMPARE(QMetaType::Type(QJsonValue(QJsonArray()).toVariant().type()), QMetaType::QVariantList); // QTBUG-32524
+
QJsonArray array;
QVariantList list = array.toVariantList();
QVERIFY(list.isEmpty());