aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMitch Curtis <mitch.curtis@qt.io>2018-01-04 14:52:56 +0100
committerMitch Curtis <mitch.curtis@qt.io>2018-01-04 14:35:26 +0000
commitccee761f06be0f62b84f944a76b0aa4dc759091f (patch)
treef35c5e79d8db6162581a819245943f289b3e9abd
parentbc49400b7df51312e918097de429826484fa5c61 (diff)
Fix segfault on invalid property alias syntax
Task-number: QTBUG-64798 Change-Id: Id1eb434f83ec89c5ea1ebaa4d8ec86fce9f4428f Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
-rw-r--r--src/qml/compiler/qqmltypecompiler.cpp6
-rw-r--r--tests/auto/qml/qqmllanguage/data/invalidAlias.12.errors.txt1
-rw-r--r--tests/auto/qml/qqmllanguage/data/invalidAlias.12.qml6
-rw-r--r--tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp1
4 files changed, 13 insertions, 1 deletions
diff --git a/src/qml/compiler/qqmltypecompiler.cpp b/src/qml/compiler/qqmltypecompiler.cpp
index 568ad4af89..0dd3cf9bfa 100644
--- a/src/qml/compiler/qqmltypecompiler.cpp
+++ b/src/qml/compiler/qqmltypecompiler.cpp
@@ -1080,7 +1080,11 @@ QQmlComponentAndAliasResolver::AliasResolutionResult QQmlComponentAndAliasResolv
alias->flags |= QV4::CompiledData::Alias::AliasPointsToPointerObject;
} else {
QQmlPropertyCache *targetCache = propertyCaches.at(targetObjectIndex);
- Q_ASSERT(targetCache);
+ if (!targetCache) {
+ *error = QQmlCompileError(alias->referenceLocation, tr("Invalid alias target location: %1").arg(property.toString()));
+ break;
+ }
+
QmlIR::PropertyResolver resolver(targetCache);
QQmlPropertyData *targetProperty = resolver.property(property.toString());
diff --git a/tests/auto/qml/qqmllanguage/data/invalidAlias.12.errors.txt b/tests/auto/qml/qqmllanguage/data/invalidAlias.12.errors.txt
new file mode 100644
index 0000000000..8b94763860
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/invalidAlias.12.errors.txt
@@ -0,0 +1 @@
+4:28:Invalid alias target location: source
diff --git a/tests/auto/qml/qqmllanguage/data/invalidAlias.12.qml b/tests/auto/qml/qqmllanguage/data/invalidAlias.12.qml
new file mode 100644
index 0000000000..71063ae320
--- /dev/null
+++ b/tests/auto/qml/qqmllanguage/data/invalidAlias.12.qml
@@ -0,0 +1,6 @@
+import QtQuick 2.0
+
+QtObject {
+ property alias source: previewImage.source
+ previewImage { id: previewImage }
+}
diff --git a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
index d04a83cd5b..b1a17afd2c 100644
--- a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
+++ b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
@@ -510,6 +510,7 @@ void tst_qqmllanguage::errors_data()
QTest::newRow("invalidAlias.9") << "invalidAlias.9.qml" << "invalidAlias.9.errors.txt" << false;
QTest::newRow("invalidAlias.10") << "invalidAlias.10.qml" << "invalidAlias.10.errors.txt" << false;
QTest::newRow("invalidAlias.11") << "invalidAlias.11.qml" << "invalidAlias.11.errors.txt" << false;
+ QTest::newRow("invalidAlias.12") << "invalidAlias.12.qml" << "invalidAlias.12.errors.txt" << false;
QTest::newRow("invalidAttachedProperty.1") << "invalidAttachedProperty.1.qml" << "invalidAttachedProperty.1.errors.txt" << false;
QTest::newRow("invalidAttachedProperty.2") << "invalidAttachedProperty.2.qml" << "invalidAttachedProperty.2.errors.txt" << false;