diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2024-01-12 12:18:01 +0100 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2024-01-19 10:04:08 +0000 |
commit | 0592a8709b4801b044c9324a41b1c253a2e09a5e (patch) | |
tree | 5aa4494be09198601cb3df7376c37baa53f07d44 /src/lib | |
parent | 5791190fca42c8e78c19ee921487be77ee395969 (diff) |
DependenciesResolver: Fix module name prefix collision check
The algorithm did not properly handle names with more than two
components.
Fixes: QBS-1772
Change-Id: Ia680c69907c449e46977f2c5615707805a3b785f
Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/corelib/loader/dependenciesresolver.cpp | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/lib/corelib/loader/dependenciesresolver.cpp b/src/lib/corelib/loader/dependenciesresolver.cpp index b46ed44a0..2110e3254 100644 --- a/src/lib/corelib/loader/dependenciesresolver.cpp +++ b/src/lib/corelib/loader/dependenciesresolver.cpp @@ -993,21 +993,30 @@ void DependenciesResolver::checkForModuleNamePrefixCollision( return; for (const Item::Module &m : m_product.item->modules()) { - if (m.name.length() == dependency.name.length() - || m.name.front() != dependency.name.front()) { + if (m.name.length() == dependency.name.length()) continue; - } + QualifiedId shortName; QualifiedId longName; - if (m.name < dependency.name) { + if (m.name.length() < dependency.name.length()) { shortName = m.name; longName = dependency.name; } else { shortName = dependency.name; longName = m.name; } - throw ErrorInfo(Tr::tr("The name of module '%1' is equal to the first component of the " - "name of module '%2', which is not allowed") + const auto isPrefix = [&] { + for (int i = 0; i < shortName.length(); ++i) { + if (shortName.at(i) != longName.at(i)) + return false; + } + return true; + }; + if (!isPrefix()) + continue; + + throw ErrorInfo(Tr::tr("The name of module '%1' is a prefix of the name of module '%2', " + "which is not allowed") .arg(shortName.toString(), longName.toString()), dependency.location()); } } |