aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2024-01-12 12:18:01 +0100
committerChristian Kandeler <christian.kandeler@qt.io>2024-01-19 10:04:08 +0000
commit0592a8709b4801b044c9324a41b1c253a2e09a5e (patch)
tree5aa4494be09198601cb3df7376c37baa53f07d44 /src/lib
parent5791190fca42c8e78c19ee921487be77ee395969 (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.cpp21
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());
}
}