From 1c93b9ce6e180e7beeaae32c524a6726d50939c5 Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Wed, 9 Nov 2011 11:09:27 +0000 Subject: [PATCH] Fix v4 crash when accessing invalid attached property Task-number: QTBUG-21883 Change-Id: Ic14a5d494890fc1bc322c660b97f657d640f2ff8 Reviewed-by: Kent Hansen --- src/declarative/qml/v4/qv4compiler.cpp | 3 ++- tests/auto/declarative/v4/data/qtbug_21883.qml | 5 +++++ tests/auto/declarative/v4/tst_v4.cpp | 14 ++++++++++++++ 3 files changed, 21 insertions(+), 1 deletions(-) create mode 100644 tests/auto/declarative/v4/data/qtbug_21883.qml diff --git a/src/declarative/qml/v4/qv4compiler.cpp b/src/declarative/qml/v4/qv4compiler.cpp index 857bceb..31a0a1e 100644 --- a/src/declarative/qml/v4/qv4compiler.cpp +++ b/src/declarative/qml/v4/qv4compiler.cpp @@ -311,7 +311,8 @@ void QV4CompilerPrivate::visitName(IR::Name *e) attached.output = currentReg; attached.reg = currentReg; attached.exceptionId = exceptionId(e->line, e->column); - Q_ASSERT(e->declarativeType->attachedPropertiesId() != -1); + if (e->declarativeType->attachedPropertiesId() == -1) + discard(); attached.id = e->declarativeType->attachedPropertiesId(); gen(attached); } break; diff --git a/tests/auto/declarative/v4/data/qtbug_21883.qml b/tests/auto/declarative/v4/data/qtbug_21883.qml new file mode 100644 index 0000000..a51f97c --- /dev/null +++ b/tests/auto/declarative/v4/data/qtbug_21883.qml @@ -0,0 +1,5 @@ +import Qt.v4 1.0 + +Result { + property Result dummy: Result +} diff --git a/tests/auto/declarative/v4/tst_v4.cpp b/tests/auto/declarative/v4/tst_v4.cpp index 0b6b2c2..20d739f 100644 --- a/tests/auto/declarative/v4/tst_v4.cpp +++ b/tests/auto/declarative/v4/tst_v4.cpp @@ -77,6 +77,7 @@ private slots: void qtscript_data(); void nestedObjectAccess(); void subscriptionsInConditionalExpressions(); + void qtbug_21883(); private: QDeclarativeEngine engine; @@ -239,6 +240,19 @@ void tst_v4::subscriptionsInConditionalExpressions() delete o; } +// Crash test +void tst_v4::qtbug_21883() +{ + QDeclarativeComponent component(&engine, TEST_FILE("qtbug_21883.qml")); + + QString warning = component.url().toString() + ":4: Unable to assign null to ResultObject*"; + QTest::ignoreMessage(QtWarningMsg, warning.toLatin1().constData()); + + QObject *o = component.create(); + QVERIFY(o != 0); + delete o; +} + QTEST_MAIN(tst_v4) #include "tst_v4.moc" -- 1.7.2.5