Skip to content

Commit

Permalink
DeclarativeEngineDebugService: Fix Crash
Browse files Browse the repository at this point in the history
Iterate through contents of QVariantMap to convert
QObjects to streamable type.

Change-Id: I2cb64a84aef674904de43f9a0c0fee539b87a59a
Reviewed-by: Kai Koehne <kai.koehne@nokia.com>
  • Loading branch information
Aurindam Jana authored and Qt by Nokia committed Feb 21, 2012
1 parent 17307fc commit 2d72f97
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 0 deletions.
13 changes: 13 additions & 0 deletions src/declarative/debugger/qdeclarativeenginedebugservice.cpp
Expand Up @@ -176,6 +176,9 @@ QVariant QDeclarativeEngineDebugService::valueContents(const QVariant &value) co
{
int userType = value.userType();

//QObject * is not streamable.
//Convert all such instances to a String value

if (value.type() == QVariant::List) {
QVariantList contents;
QVariantList list = value.toList();
Expand All @@ -185,6 +188,16 @@ QVariant QDeclarativeEngineDebugService::valueContents(const QVariant &value) co
return contents;
}

if (value.type() == QVariant::Map) {
QVariantMap contents;
QMapIterator<QString, QVariant> i(value.toMap());
while (i.hasNext()) {
i.next();
contents.insert(i.key(), valueContents(i.value()));
}
return contents;
}

if (QDeclarativeValueTypeFactory::isValueType(userType))
return value;

Expand Down
Expand Up @@ -317,11 +317,15 @@ void tst_QDeclarativeEngineDebug::initTestCase()
"}"
"property variant varObj\n"
"property variant varObjList: []\n"
"property variant varObjMap\n"
"Component.onCompleted: {\n"
"varObj = blueRect;\n"
"var list = varObjList;\n"
"list[0] = blueRect;\n"
"varObjList = list;\n"
"var map = new Object;\n"
"map.rect = blueRect;\n"
"varObjMap = map;\n"
"}\n"
"NonScriptPropertyElement {\n"
"}\n"
Expand Down Expand Up @@ -852,6 +856,9 @@ void tst_QDeclarativeEngineDebug::queryExpressionResult_data()
QTest::newRow("bad expr") << "aeaef" << qVariantFromValue(QString("<undefined>"));
QTest::newRow("QObject*") << "varObj" << qVariantFromValue(QString("<unnamed object>"));
QTest::newRow("list of QObject*") << "varObjList" << qVariantFromValue(QString("<unknown value>"));
QVariantMap map;
map.insert(QLatin1String("rect"), QVariant(QLatin1String("<unnamed object>")));
QTest::newRow("varObjMap") << "varObjMap" << qVariantFromValue(map);
}

void tst_QDeclarativeEngineDebug::tst_QDeclarativeDebugFileReference()
Expand Down

0 comments on commit 2d72f97

Please sign in to comment.