QMimeProvider: Do not crash when globPatterns is empty.
Change-Id: I351a533a1f03ac2e7bdec876b657a80fac60b2ed Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
This commit is contained in:
parent
a47cd2cc82
commit
af3152adee
@ -624,7 +624,7 @@ void QMimeBinaryProvider::loadMimeTypePrivate(QMimeTypePrivate &data)
|
||||
// Let's assume that shared-mime-info is at least version 0.70
|
||||
// Otherwise we would need 1) a version check, and 2) code for parsing patterns from the globs file.
|
||||
#if 1
|
||||
if (!mainPattern.isEmpty() && data.globPatterns.first() != mainPattern) {
|
||||
if (!mainPattern.isEmpty() && (data.globPatterns.isEmpty() || data.globPatterns.first() != mainPattern)) {
|
||||
// ensure it's first in the list of patterns
|
||||
data.globPatterns.removeAll(mainPattern);
|
||||
data.globPatterns.prepend(mainPattern);
|
||||
|
@ -2,6 +2,7 @@
|
||||
<qresource prefix="/qt-project.org/qmime">
|
||||
<file alias="yast2-metapackage-handler-mimetypes.xml">yast2-metapackage-handler-mimetypes.xml</file>
|
||||
<file alias="qml-again.xml">qml-again.xml</file>
|
||||
<file alias="text-x-objcsrc.xml">text-x-objcsrc.xml</file>
|
||||
<file alias="test.qml">test.qml</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
|
||||
<mime-type type="text/x-objcsrc">
|
||||
<comment>Objective-C source code</comment>
|
||||
<glob-deleteall/>
|
||||
</mime-type>
|
||||
</mime-info>
|
@ -47,6 +47,7 @@
|
||||
|
||||
static const char yastFileName[] ="yast2-metapackage-handler-mimetypes.xml";
|
||||
static const char qmlAgainFileName[] ="qml-again.xml";
|
||||
static const char textXObjCSrcFileName[] ="text-x-objcsrc.xml";
|
||||
#define RESOURCE_PREFIX ":/qt-project.org/qmime/"
|
||||
|
||||
void initializeLang()
|
||||
@ -152,6 +153,8 @@ void tst_QMimeDatabase::initTestCase()
|
||||
QVERIFY2(QFile::exists(m_yastMimeTypes), qPrintable(errorMessage.arg(yastFileName)));
|
||||
m_qmlAgainFileName = QLatin1String(RESOURCE_PREFIX) + qmlAgainFileName;
|
||||
QVERIFY2(QFile::exists(m_qmlAgainFileName), qPrintable(errorMessage.arg(qmlAgainFileName)));
|
||||
m_textXObjCSrcFileName = QLatin1String(RESOURCE_PREFIX) + textXObjCSrcFileName;
|
||||
QVERIFY2(QFile::exists(m_textXObjCSrcFileName), qPrintable(errorMessage.arg(textXObjCSrcFileName)));
|
||||
|
||||
initTestCaseInternal();
|
||||
m_isUsingCacheProvider = !qEnvironmentVariableIsSet("QT_NO_MIME_CACHE");
|
||||
@ -880,6 +883,8 @@ void tst_QMimeDatabase::installNewGlobalMimeType()
|
||||
QFile::remove(destFile);
|
||||
const QString destQmlFile = destDir + QLatin1String(qmlAgainFileName);
|
||||
QFile::remove(destQmlFile);
|
||||
const QString destTextXObjCSrcFile = destDir + QLatin1String(textXObjCSrcFileName);
|
||||
QFile::remove(destTextXObjCSrcFile);
|
||||
//qDebug() << destFile;
|
||||
|
||||
if (!QFileInfo(destDir).isDir())
|
||||
@ -887,6 +892,7 @@ void tst_QMimeDatabase::installNewGlobalMimeType()
|
||||
QString errorMessage;
|
||||
QVERIFY2(copyResourceFile(m_yastMimeTypes, destFile, &errorMessage), qPrintable(errorMessage));
|
||||
QVERIFY2(copyResourceFile(m_qmlAgainFileName, destQmlFile, &errorMessage), qPrintable(errorMessage));
|
||||
QVERIFY2(copyResourceFile(m_textXObjCSrcFileName, destTextXObjCSrcFile, &errorMessage), qPrintable(errorMessage));
|
||||
if (m_isUsingCacheProvider && !waitAndRunUpdateMimeDatabase(mimeDir))
|
||||
QSKIP("shared-mime-info not found, skipping mime.cache test");
|
||||
|
||||
@ -903,9 +909,17 @@ void tst_QMimeDatabase::installNewGlobalMimeType()
|
||||
QCOMPARE(db.mimeTypeForFile(qmlTestFile).name(),
|
||||
QString::fromLatin1("text/x-qml"));
|
||||
|
||||
// ensure we can access the empty glob list
|
||||
{
|
||||
QMimeType objcsrc = db.mimeTypeForName(QStringLiteral("text/x-objcsrc"));
|
||||
QVERIFY(objcsrc.isValid());
|
||||
qDebug() << objcsrc.globPatterns();
|
||||
}
|
||||
|
||||
// Now test removing it again
|
||||
QVERIFY(QFile::remove(destFile));
|
||||
QVERIFY(QFile::remove(destQmlFile));
|
||||
QVERIFY(QFile::remove(destTextXObjCSrcFile));
|
||||
if (m_isUsingCacheProvider && !waitAndRunUpdateMimeDatabase(mimeDir))
|
||||
QSKIP("shared-mime-info not found, skipping mime.cache test");
|
||||
QCOMPARE(db.mimeTypeForFile(QLatin1String("foo.ymu"), QMimeDatabase::MatchExtension).name(),
|
||||
|
@ -94,6 +94,7 @@ private:
|
||||
QString m_localMimeDir;
|
||||
QString m_yastMimeTypes;
|
||||
QString m_qmlAgainFileName;
|
||||
QString m_textXObjCSrcFileName;
|
||||
QTemporaryDir m_temporaryDir;
|
||||
QString m_testSuite;
|
||||
bool m_isUsingCacheProvider;
|
||||
|
Loading…
x
Reference in New Issue
Block a user