aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@digia.com>2013-05-27 15:51:21 +0200
committerJoerg Bornemann <joerg.bornemann@digia.com>2013-05-27 16:07:11 +0200
commitbd766f927bd6501a4c4c9fb0aee2c7a813cf721c (patch)
tree476123c37748059b830cfd76e92c2eebb36ddee4
parentce77ec7f02e72818c012a24f2731adb6efdff515 (diff)
fix relative paths with .. in wildcards
The absolute file paths that are returned by wildcards must not contain substrings like "..". Running those through QDir::cleanPath now. Autotest TestLanguage::wildcards enhanced. Task-number: QBS-287 Change-Id: Id6882d9d6eaa875bed42ac1830afef43a705b4da Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
-rw-r--r--src/lib/language/language.cpp2
-rw-r--r--src/lib/language/tst_language.cpp31
2 files changed, 31 insertions, 2 deletions
diff --git a/src/lib/language/language.cpp b/src/lib/language/language.cpp
index 1fe2ababb..35fbf9296 100644
--- a/src/lib/language/language.cpp
+++ b/src/lib/language/language.cpp
@@ -778,7 +778,7 @@ void SourceWildCards::expandPatterns(QSet<QString> &result, const GroupConstPtr
if (isDir)
expandPatterns(result, group, changed_parts, filePath);
else
- result += filePath;
+ result += QDir::cleanPath(filePath);
}
}
diff --git a/src/lib/language/tst_language.cpp b/src/lib/language/tst_language.cpp
index ec825f86a..f4d4f9ad9 100644
--- a/src/lib/language/tst_language.cpp
+++ b/src/lib/language/tst_language.cpp
@@ -948,6 +948,7 @@ void TestLanguage::wildcards_data()
{
QTest::addColumn<bool>("useGroup");
QTest::addColumn<QStringList>("filesToCreate");
+ QTest::addColumn<QString>("projectFileSubDir");
QTest::addColumn<QString>("prefix");
QTest::addColumn<QStringList>("patterns");
QTest::addColumn<QStringList>("excludePatterns");
@@ -961,6 +962,7 @@ void TestLanguage::wildcards_data()
<< useGroup
<< (QStringList() << "foo.h" << "foo.cpp" << "bar.h" << "bar.cpp")
<< QString()
+ << QString()
<< (QStringList() << "*.h")
<< QStringList()
<< (QStringList() << "foo.h" << "bar.h");
@@ -968,6 +970,7 @@ void TestLanguage::wildcards_data()
<< useGroup
<< (QStringList() << "foo.h" << "foo.cpp" << "bar.h" << "bar.cpp")
<< QString()
+ << QString()
<< (QStringList() << "foo.*")
<< QStringList()
<< (QStringList() << "foo.h" << "foo.cpp");
@@ -975,6 +978,7 @@ void TestLanguage::wildcards_data()
<< useGroup
<< (QStringList() << "foo.h" << "foo.cpp" << "bar.h" << "bar.cpp")
<< QString()
+ << QString()
<< (QStringList() << "*.h" << "*.cpp")
<< QStringList()
<< (QStringList() << "foo.h" << "foo.cpp" << "bar.h" << "bar.cpp");
@@ -982,6 +986,7 @@ void TestLanguage::wildcards_data()
<< useGroup
<< (QStringList() << "foo.h" << "foo.cpp" << "bar.h" << "bar.cpp")
<< QString()
+ << QString()
<< (QStringList() << "*.h" << "*.cpp")
<< (QStringList() << "bar*")
<< (QStringList() << "foo.h" << "foo.cpp");
@@ -989,6 +994,7 @@ void TestLanguage::wildcards_data()
<< useGroup
<< (QStringList() << "foo.h" << "foo.cpp" << "bar.h" << "bar.cpp")
<< QString()
+ << QString()
<< (QStringList() << "*")
<< (QStringList() << "*.qbs")
<< (QStringList() << "foo.h" << "foo.cpp" << "bar.h" << "bar.cpp");
@@ -996,6 +1002,7 @@ void TestLanguage::wildcards_data()
<< useGroup
<< (QStringList() << "a/foo.h" << "a/foo.cpp" << "a/b/bar.h" << "a/b/bar.cpp")
<< QString()
+ << QString()
<< (QStringList() << "a/*")
<< QStringList()
<< (QStringList() << "a/foo.h" << "a/foo.cpp");
@@ -1003,14 +1010,24 @@ void TestLanguage::wildcards_data()
<< useGroup
<< (QStringList() << "foo.h" << "foo.cpp" << "bar.h" << "bar.cpp")
<< QString()
+ << QString()
<< (QStringList() << m_wildcardsTestDirPath + "/?oo.*")
<< QStringList()
<< (QStringList() << "foo.h" << "foo.cpp");
+ QTest::newRow(QByteArray("relative paths with dotdot") + dataTagSuffix)
+ << useGroup
+ << (QStringList() << "bar.h" << "bar.cpp")
+ << QString("TheLaughingLlama")
+ << QString()
+ << (QStringList() << "../bar.*")
+ << QStringList()
+ << (QStringList() << "bar.h" << "bar.cpp");
}
QTest::newRow(QByteArray("recursive 1"))
<< useGroup
<< (QStringList() << "a/foo.h" << "a/foo.cpp" << "a/b/bar.h" << "a/b/bar.cpp")
<< QString()
+ << QString()
<< (QStringList() << "a/**")
<< QStringList()
<< (QStringList() << "a/foo.h" << "a/foo.cpp" << "a/b/bar.h" << "a/b/bar.cpp");
@@ -1024,6 +1041,7 @@ void TestLanguage::wildcards_data()
<< "a/d/1.cpp" << "a/b/d/1.cpp" << "a/b/c/d/1.h"
<< "a/d/e/1.cpp" << "a/b/d/e/1.cpp" << "a/b/c/d/e/1.cpp")
<< QString()
+ << QString()
<< (QStringList() << "a/**/d/*.h")
<< QStringList()
<< (QStringList() << "a/d/1.h" << "a/b/d/1.h" << "a/b/c/d/1.h");
@@ -1031,6 +1049,7 @@ void TestLanguage::wildcards_data()
<< useGroup
<< (QStringList() << "a/foo.h" << "a/foo.cpp" << "a/b/bar.h" << "a/b/bar.cpp")
<< QString()
+ << QString()
<< (QStringList() << "a/**/**/**")
<< QStringList()
<< (QStringList() << "a/foo.h" << "a/foo.cpp" << "a/b/bar.h" << "a/b/bar.cpp");
@@ -1038,6 +1057,7 @@ void TestLanguage::wildcards_data()
<< useGroup
<< (QStringList() << "subdir/foo.h" << "subdir/foo.cpp" << "subdir/bar.h"
<< "subdir/bar.cpp")
+ << QString()
<< QString("subdir/")
<< (QStringList() << "*.h")
<< QStringList()
@@ -1048,6 +1068,7 @@ void TestLanguage::wildcards()
{
QFETCH(bool, useGroup);
QFETCH(QStringList, filesToCreate);
+ QFETCH(QString, projectFileSubDir);
QFETCH(QString, prefix);
QFETCH(QStringList, patterns);
QFETCH(QStringList, excludePatterns);
@@ -1070,7 +1091,15 @@ void TestLanguage::wildcards()
const QString groupName = "Keks";
QString dataTag = QString::fromLocal8Bit(QTest::currentDataTag());
dataTag.replace(' ', '_');
- const QString projectFilePath = m_wildcardsTestDirPath + "/test_" + dataTag + ".qbs";
+ if (!projectFileSubDir.isEmpty()) {
+ if (!projectFileSubDir.startsWith('/'))
+ projectFileSubDir.prepend('/');
+ if (projectFileSubDir.endsWith('/'))
+ projectFileSubDir.chop(1);
+ QVERIFY(QDir().mkpath(m_wildcardsTestDirPath + projectFileSubDir));
+ }
+ const QString projectFilePath = m_wildcardsTestDirPath + projectFileSubDir + "/test_" + dataTag
+ + ".qbs";
{
QFile projectFile(projectFilePath);
QVERIFY(projectFile.open(QIODevice::WriteOnly));