summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp
diff options
context:
space:
mode:
authorAlex Henrie <alexhenrie24@gmail.com>2023-11-15 09:36:06 -0700
committerAlex Henrie <alexhenrie24@gmail.com>2023-11-17 02:50:11 +0000
commit54656da9ace06caf4a0eeb1832989c0ab211a4a0 (patch)
tree9f47a59962647d053918f0f098f6cd75b450aa4d /tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp
parent569320f402732e6fdd236dc00de37289b5aeaaf3 (diff)
QMimeDatabase: handle buggy type definitions with circular inheritance
This fixes an infinite loop reported by a user who had both the definition of text/javascript from shared-mime-info 2.3 and the definition of text/javascript from shared-mime-info 2.4 installed at the same time. In 2.3, text/javascript is a subtype of application/ecmascript, but in 2.4 application/ecmascript is a subtype of text/javascript. Having both at the same time resulted in circular inheritance. https://gitlab.freedesktop.org/xdg/shared-mime-info/-/merge_requests/258#note_2167707 [ChangeLog][QtCore][QMimeDatabase] Added code to detect and break circular inheritance loops in the MIME data, which were causing infinite loops Pick-to: 6.6 6.5 Change-Id: Ic207b1593a49c7bb88e4fd810d8f88aa630087ce Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: David Faure <david.faure@kdab.com>
Diffstat (limited to 'tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp')
-rw-r--r--tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp b/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp
index 9bc3037c99..d7db4bb9bf 100644
--- a/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp
+++ b/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp
@@ -48,6 +48,7 @@ static const std::array additionalLocalMimeFiles = {
"invalid-magic2.xml",
"invalid-magic3.xml",
"magic-and-hierarchy.xml",
+ "circular-inheritance.xml",
"webm-glob-deleteall.xml",
};
@@ -388,6 +389,13 @@ void tst_QMimeDatabase::inheritance()
const QMimeType mswordTemplate = db.mimeTypeForName(QString::fromLatin1("application/msword-template"));
QVERIFY(mswordTemplate.isValid());
QVERIFY(mswordTemplate.inherits(QLatin1String("application/msword")));
+
+ // Check that buggy type definitions that have circular inheritance don't cause an infinite
+ // loop, especially when resolving a conflict between the file's name and its contents
+ const QMimeType ecmascript = db.mimeTypeForName(QString::fromLatin1("application/ecmascript"));
+ QVERIFY(ecmascript.allAncestors().contains("text/plain"));
+ const QMimeType javascript = db.mimeTypeForFileNameAndData("xml.js", "<?xml?>");
+ QVERIFY(javascript.inherits(QString::fromLatin1("text/javascript")));
}
void tst_QMimeDatabase::aliases()