diff options
author | Alex Henrie <alexhenrie24@gmail.com> | 2023-11-15 09:36:06 -0700 |
---|---|---|
committer | Alex Henrie <alexhenrie24@gmail.com> | 2023-11-17 02:50:11 +0000 |
commit | 54656da9ace06caf4a0eeb1832989c0ab211a4a0 (patch) | |
tree | 9f47a59962647d053918f0f098f6cd75b450aa4d /tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp | |
parent | 569320f402732e6fdd236dc00de37289b5aeaaf3 (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.cpp | 8 |
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() |