From c4e4bb9604a884ca5966ebab19e510a1966f798a Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Wed, 25 Apr 2018 11:40:05 +0200 Subject: Prevent empty strings in qbsSearchPaths As QFileInfo::canonicalFilePath might return an empty string, we must remove all empty strings from the result of makePathsCanonical. All other search path handling code is not prepared for handling empty strings. This fixes ---snip--- SOFT ASSERT: isAbsolute(base, hostOs) && !isCurrentDrivePath(rel, hostOs) in ../../../../master/src/lib/corelib/tools/fileinfo.cpp:192 base: , rel: qbs/base ---snap--- we would get when having a non-existent path in qbsSearchPaths. Change-Id: I62c3c1054fd762b521005ab8da08b194148428b4 Reviewed-by: Christian Kandeler --- src/lib/corelib/language/itemreader.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/lib/corelib/language/itemreader.cpp b/src/lib/corelib/language/itemreader.cpp index 22f4ff11c..578f194bc 100644 --- a/src/lib/corelib/language/itemreader.cpp +++ b/src/lib/corelib/language/itemreader.cpp @@ -50,10 +50,15 @@ namespace qbs { namespace Internal { -void makePathsCanonical(QStringList &paths) +static void makePathsCanonical(QStringList &paths) { - for (QString &p : paths) + auto it = std::remove_if(paths.begin(), paths.end(), [](QString &p) { p = QFileInfo(p).canonicalFilePath(); + return p.isEmpty(); + }); + auto e = paths.end(); + if (it != e) + paths.erase(it, e); } ItemReader::ItemReader(Logger &logger) : m_visitorState(new ItemReaderVisitorState(logger)) -- cgit v1.2.3