From dd2425eb02db456b851c4662ff6a65d0b54b7eeb Mon Sep 17 00:00:00 2001
From: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
Date: Thu, 5 Sep 2013 18:30:05 +0200
Subject: [PATCH] make setting a bad $$[QMAKEFEATURES] not crash qmake

Task-number: QTBUG-29642
Change-Id: I9cc209eb313f03bf342bcb64b1de3005755700a7
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
(cherry picked from qtbase/50a90720be7d67dcdfe704a82fb3b1138edd2aab)
---
 src/shared/proparser/qmakeevaluator.cpp |  4 ++--
 src/shared/proparser/qmakeglobals.cpp   | 24 ++++++++++++++----------
 src/shared/proparser/qmakeglobals.h     |  1 +
 3 files changed, 17 insertions(+), 12 deletions(-)

diff --git a/src/shared/proparser/qmakeevaluator.cpp b/src/shared/proparser/qmakeevaluator.cpp
index 1da18a3980f..b8caf126948 100644
--- a/src/shared/proparser/qmakeevaluator.cpp
+++ b/src/shared/proparser/qmakeevaluator.cpp
@@ -1445,8 +1445,8 @@ void QMakeEvaluator::updateFeaturePaths()
 
     feature_roots += m_qmakefeatures;
 
-    feature_roots += m_option->propertyValue(ProKey("QMAKEFEATURES")).toQString(m_mtmp).split(
-            m_option->dirlist_sep, QString::SkipEmptyParts);
+    feature_roots += m_option->splitPathList(
+                m_option->propertyValue(ProKey("QMAKEFEATURES")).toQString(m_mtmp));
 
     QStringList feature_bases;
     if (!m_buildRoot.isEmpty()) {
diff --git a/src/shared/proparser/qmakeglobals.cpp b/src/shared/proparser/qmakeglobals.cpp
index 5f0b521e460..d34d7ba4e65 100644
--- a/src/shared/proparser/qmakeglobals.cpp
+++ b/src/shared/proparser/qmakeglobals.cpp
@@ -258,6 +258,19 @@ QString QMakeGlobals::shadowedPath(const QString &fileName) const
     return QString();
 }
 
+QStringList QMakeGlobals::splitPathList(const QString &val) const
+{
+    QStringList ret;
+    if (!val.isEmpty()) {
+        QDir bdir;
+        QStringList vals = val.split(dirlist_sep);
+        ret.reserve(vals.length());
+        foreach (const QString &it, vals)
+            ret << QDir::cleanPath(bdir.absoluteFilePath(it));
+    }
+    return ret;
+}
+
 QString QMakeGlobals::getEnv(const QString &var) const
 {
 #ifdef PROEVALUATOR_SETENV
@@ -269,16 +282,7 @@ QString QMakeGlobals::getEnv(const QString &var) const
 
 QStringList QMakeGlobals::getPathListEnv(const QString &var) const
 {
-    QStringList ret;
-    QString val = getEnv(var);
-    if (!val.isEmpty()) {
-        QDir bdir;
-        QStringList vals = val.split(dirlist_sep);
-        ret.reserve(vals.length());
-        foreach (const QString &it, vals)
-            ret << QDir::cleanPath(bdir.absoluteFilePath(it));
-    }
-    return ret;
+    return splitPathList(getEnv(var));
 }
 
 QString QMakeGlobals::expandEnvVars(const QString &str) const
diff --git a/src/shared/proparser/qmakeglobals.h b/src/shared/proparser/qmakeglobals.h
index ecdf316c7bc..4e45f3fb6a9 100644
--- a/src/shared/proparser/qmakeglobals.h
+++ b/src/shared/proparser/qmakeglobals.h
@@ -135,6 +135,7 @@ public:
 
     QString expandEnvVars(const QString &str) const;
     QString shadowedPath(const QString &fileName) const;
+    QStringList splitPathList(const QString &value) const;
 
 private:
     QString getEnv(const QString &) const;
-- 
GitLab