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