From 953f0daa50a32fa2539a1a3dadcb5524b4b60b34 Mon Sep 17 00:00:00 2001 From: Christian Kamm <christian.d.kamm@nokia.com> Date: Thu, 29 Apr 2010 14:06:10 +0200 Subject: [PATCH] QmlJS: Add a check to disallow recursive type definitions in xml file. At least direct recursion with name="Foo" extends="Foo" is detected and rejected. Done-with: Erik Verbruggen --- src/libs/qmljs/qmljsinterpreter.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp index 4e211a41cad..b3c4a30b9bb 100644 --- a/src/libs/qmljs/qmljsinterpreter.cpp +++ b/src/libs/qmljs/qmljsinterpreter.cpp @@ -384,6 +384,7 @@ private: const QLatin1String tag("type"); Q_ASSERT(_xml.isStartElement() && _xml.name() == tag); + bool doInsert = true; QString name, defaultPropertyName; int major = -1, minor = -1; QString extends; @@ -423,6 +424,11 @@ private: } else if (attr.name() == QLatin1String("extends")) { if (! attr.value().isEmpty()) extends = attr.value().toString(); + + if (extends == name) { + invalidAttr(extends, QLatin1String("extends"), tag); + doInsert = false; + } } else { ignoreAttr(attr); } @@ -450,7 +456,10 @@ private: unexpectedElement(_xml.name(), tag); } - _objects->insert(name, metaObject); + if (doInsert) + _objects->insert(name, metaObject); + else + delete metaObject; } bool split(const QString &name, QString *packageName, QString *className) { -- GitLab