diff options
5 files changed, 22 insertions, 0 deletions
diff --git a/src/lib/corelib/language/moduleloader.cpp b/src/lib/corelib/language/moduleloader.cpp index ab4c0026b..873e10412 100644 --- a/src/lib/corelib/language/moduleloader.cpp +++ b/src/lib/corelib/language/moduleloader.cpp @@ -938,6 +938,10 @@ void ModuleLoader::handlePropertyOptions(Item *optionsItem) throw ErrorInfo(Tr::tr("PropertyOptions item needs a name property"), optionsItem->location()); } + if (!optionsItem->parent()->hasProperty(name)) { + throw ErrorInfo(Tr::tr("PropertyOptions item refers to non-existing property '%1'") + .arg(name), optionsItem->location()); + } const QString description = m_evaluator->stringValue(optionsItem, QLatin1String("description")); const auto removalVersion = Version::fromString(m_evaluator->stringValue(optionsItem, QLatin1String("removalVersion"))); @@ -1241,6 +1245,7 @@ void ModuleLoader::adjustDefiningItemsInGroupModuleInstances(const Item::Module int prototypeChainLen = 0; do { instanceWithProperty = instanceWithProperty->prototype(); + QBS_CHECK(instanceWithProperty); ++prototypeChainLen; propValue = instanceWithProperty->properties().value(propName); } while (!propValue); diff --git a/src/lib/corelib/language/testdata/erroneous/invalid-property-option.qbs b/src/lib/corelib/language/testdata/erroneous/invalid-property-option.qbs new file mode 100644 index 000000000..6e74faf8a --- /dev/null +++ b/src/lib/corelib/language/testdata/erroneous/invalid-property-option.qbs @@ -0,0 +1,5 @@ +import qbs + +Product { + Depends { name: "module-with-wrong-property-option" } +} diff --git a/src/lib/corelib/language/testdata/erroneous/modules/module-with-wrong-property-option/m.qbs b/src/lib/corelib/language/testdata/erroneous/modules/module-with-wrong-property-option/m.qbs new file mode 100644 index 000000000..8ea67f2c5 --- /dev/null +++ b/src/lib/corelib/language/testdata/erroneous/modules/module-with-wrong-property-option/m.qbs @@ -0,0 +1,9 @@ +import qbs + +Module { + property string someProp + PropertyOptions { + name: "s0meProp" + description: "Oops, spelt the property name wrong" + } +} diff --git a/src/lib/corelib/language/tst_language.cpp b/src/lib/corelib/language/tst_language.cpp index 3af8e51d8..9823a8d34 100644 --- a/src/lib/corelib/language/tst_language.cpp +++ b/src/lib/corelib/language/tst_language.cpp @@ -564,6 +564,8 @@ void TestLanguage::erroneousFiles_data() "component of the name of module 'prefix2.suffix'"; QTest::newRow("conflicting-properties-in-export-items") << "Export item in inherited item redeclares property 'theProp' with different type."; + QTest::newRow("invalid-property-option") + << "PropertyOptions item refers to non-existing property 's0meProp'"; } void TestLanguage::erroneousFiles() diff --git a/tests/auto/blackbox/testdata/deprecated-property/modules/themodule/m.qbs b/tests/auto/blackbox/testdata/deprecated-property/modules/themodule/m.qbs index f7296da93..47f1ea664 100644 --- a/tests/auto/blackbox/testdata/deprecated-property/modules/themodule/m.qbs +++ b/tests/auto/blackbox/testdata/deprecated-property/modules/themodule/m.qbs @@ -3,6 +3,7 @@ import qbs Module { property bool newProp property bool oldProp + property bool veryOldProp PropertyOptions { name: "newProp" |