From abf84c325249bbabfc256353a3f46beca10bd947 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Mon, 7 Nov 2016 12:50:47 +0100 Subject: [PATCH] Qt: Handle absolute paths to mkspecs Handle absolute paths to mkspec and do not accept any directory as a mkspec: Only accept directories containing a qmake.conf. Task-number: QTCREATORBUG-17237 Change-Id: I18c2b28a0abc525721df7c4f1ac2d272ca4cadb1 Reviewed-by: Oswald Buddenhagen Reviewed-by: Tim Jenssen --- src/plugins/qtsupport/baseqtversion.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp index 459e07dd07d..8978fff35af 100644 --- a/src/plugins/qtsupport/baseqtversion.cpp +++ b/src/plugins/qtsupport/baseqtversion.cpp @@ -1082,13 +1082,19 @@ FileName BaseQtVersion::mkspecPath() const bool BaseQtVersion::hasMkspec(const FileName &spec) const { - QFileInfo fi; - fi.setFile(QDir::fromNativeSeparators(qmakeProperty("QT_HOST_DATA")) - + QLatin1String("/mkspecs/") + spec.toString()); - if (fi.isDir()) + if (spec.isEmpty()) + return true; // default spec of a Qt version + + QDir mkspecDir = QDir(QDir::fromNativeSeparators(qmakeProperty("QT_HOST_DATA")) + + QLatin1String("/mkspecs/")); + const QString absSpec = mkspecDir.absoluteFilePath(spec.toString()); + if (QFileInfo(absSpec).isDir() && QFileInfo(absSpec + "/qmake.conf").isFile()) return true; - fi.setFile(sourcePath().toString() + QLatin1String("/mkspecs/") + spec.toString()); - return fi.isDir(); + mkspecDir.setPath(sourcePath().toString() + QLatin1String("/mkspecs/")); + const QString absSrcSpec = mkspecDir.absoluteFilePath(spec.toString()); + return absSrcSpec != absSpec + && QFileInfo(absSrcSpec).isDir() + && QFileInfo(absSrcSpec + "/qmake.conf").isFile(); } BaseQtVersion::QmakeBuildConfigs BaseQtVersion::defaultBuildConfig() const