From 1f4fe0aca4fc70ece7235623aaf88225531f1243 Mon Sep 17 00:00:00 2001 From: Chris Adams Date: Fri, 23 Dec 2011 13:01:25 +1000 Subject: [PATCH] Fix crash in var property setter Previously, the function didn't terminate after calling the setter recursively, as it should have. This patch ensures that the setter is called correctly and then returns, and adds a unit test to ensure that no regression occurs. Task-number: QTBUG-23330 Change-Id: If512fca174e5224c2c53caad11f77782e6cead9f Reviewed-by: Alan Alpert --- src/declarative/qml/qdeclarativevmemetaobject.cpp | 1 + .../data/PropertyVarBaseItem.qml | 5 +++++ .../qdeclarativeecmascript/data/propertyVar.10.qml | 8 ++++++++ .../tst_qdeclarativeecmascript.cpp | 1 + 4 files changed, 15 insertions(+), 0 deletions(-) create mode 100644 tests/auto/declarative/qdeclarativeecmascript/data/PropertyVarBaseItem.qml create mode 100644 tests/auto/declarative/qdeclarativeecmascript/data/propertyVar.10.qml diff --git a/src/declarative/qml/qdeclarativevmemetaobject.cpp b/src/declarative/qml/qdeclarativevmemetaobject.cpp index a37be92..e5e8641 100644 --- a/src/declarative/qml/qdeclarativevmemetaobject.cpp +++ b/src/declarative/qml/qdeclarativevmemetaobject.cpp @@ -992,6 +992,7 @@ void QDeclarativeVMEMetaObject::setVMEProperty(int index, v8::Handle if (index < propOffset) { Q_ASSERT(parent); static_cast(parent)->setVMEProperty(index, v); + return; } return writeVarProperty(index - propOffset, v); } diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/PropertyVarBaseItem.qml b/tests/auto/declarative/qdeclarativeecmascript/data/PropertyVarBaseItem.qml new file mode 100644 index 0000000..5f28833 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/PropertyVarBaseItem.qml @@ -0,0 +1,5 @@ +import QtQuick 2.0 + +Item { + property var random: null +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/propertyVar.10.qml b/tests/auto/declarative/qdeclarativeecmascript/data/propertyVar.10.qml new file mode 100644 index 0000000..ac7f2be --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/propertyVar.10.qml @@ -0,0 +1,8 @@ +import QtQuick 2.0 + +PropertyVarBaseItem { + property bool test: false + Component.onCompleted: { + test = true; + } +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp index 8a028ae..0e3cfd8 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp +++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp @@ -3701,6 +3701,7 @@ void tst_qdeclarativeecmascript::propertyVar_data() QTest::newRow("javascript map assignment") << testFileUrl("propertyVar.7.qml"); QTest::newRow("literal property assignment") << testFileUrl("propertyVar.8.qml"); QTest::newRow("qobject property assignment") << testFileUrl("propertyVar.9.qml"); + QTest::newRow("base class var property assignment") << testFileUrl("propertyVar.10.qml"); } void tst_qdeclarativeecmascript::propertyVar() -- 1.7.2.5