aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/utils/mimetypes
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@theqtcompany.com>2015-11-09 09:55:10 +0100
committerEike Ziller <eike.ziller@theqtcompany.com>2015-11-10 11:28:02 +0000
commit10fb3ead23b879fe56dfa9cd1b163b5ab3da3a0c (patch)
tree037c912be7c91f5548b5df6d8973bd003a25f365 /src/libs/utils/mimetypes
parentb7473459166b9bb895c6dd2e4cc0b6b1c1f72e57 (diff)
Fix that bogus mime data could lead to endless loop
<mime-type type="text/foo"> <sub-class-of type="text/foo"/> </mime-type> Change-Id: Id03cb4a37345ccc083eaaa03c33847b3735a5d4b Task-number: QTCREATORBUG-13965 Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
Diffstat (limited to 'src/libs/utils/mimetypes')
-rw-r--r--src/libs/utils/mimetypes/mimedatabase.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/libs/utils/mimetypes/mimedatabase.cpp b/src/libs/utils/mimetypes/mimedatabase.cpp
index be018edcc8e..73bd2576903 100644
--- a/src/libs/utils/mimetypes/mimedatabase.cpp
+++ b/src/libs/utils/mimetypes/mimedatabase.cpp
@@ -230,13 +230,19 @@ bool MimeDatabasePrivate::inherits(const QString &mime, const QString &parent)
const QString resolvedParent = provider()->resolveAlias(parent);
//Q_ASSERT(provider()->resolveAlias(mime) == mime);
QStack<QString> toCheck;
+ QSet<QString> seen; // avoid endless loop on bogus mime data
toCheck.push(mime);
+ seen.insert(mime);
while (!toCheck.isEmpty()) {
const QString current = toCheck.pop();
if (current == resolvedParent)
return true;
- foreach (const QString &par, provider()->parents(current))
- toCheck.push(par);
+ foreach (const QString &par, provider()->parents(current)) {
+ int seenSize = seen.size();
+ seen.insert(par);
+ if (seen.size() != seenSize) // haven't seen before, so add
+ toCheck.push(par);
+ }
}
return false;
}