summaryrefslogtreecommitdiffstats
path: root/src/corelib/mimetypes/qmimeglobpattern_p.h
diff options
context:
space:
mode:
authorDavid Faure <david.faure@kdab.com>2016-12-26 13:46:40 +0100
committerDavid Faure <david.faure@kdab.com>2016-12-27 11:33:03 +0000
commit6722147696c7ba603d24163498a3f7de76ad6cea (patch)
treead1021c3b6e0528a1820a81ff041f30445294bcd /src/corelib/mimetypes/qmimeglobpattern_p.h
parentf163912b5d577705c3d42428b0af75222f84b761 (diff)
QMimeDatabase: fix handling of conflicting globs
This code always intended to follow the recommended checking order from the spec, which says "if multiple globs match, use file contents". But if the globs had different weights, it would discard globs with lower weights, and then wrongly conclude, if there is only one glob left, that there was no ambiguity. The correct way is rather: remember that multiple globs matched, do determination from contents, and if that didn't work, *then* use (one of) the highest-weight glob(s). This fixes PGP-encrypted *.asc files being detected as text/plain rather than application/pgp-encrypted. (https://bugs.kde.org/show_bug.cgi?id=346754) Change-Id: I734459daf9f502baa95ebb89432819964e0ce304 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/mimetypes/qmimeglobpattern_p.h')
-rw-r--r--src/corelib/mimetypes/qmimeglobpattern_p.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/corelib/mimetypes/qmimeglobpattern_p.h b/src/corelib/mimetypes/qmimeglobpattern_p.h
index 3e4fdb50f6..c8b70464fd 100644
--- a/src/corelib/mimetypes/qmimeglobpattern_p.h
+++ b/src/corelib/mimetypes/qmimeglobpattern_p.h
@@ -68,7 +68,8 @@ struct QMimeGlobMatchResult
void addMatch(const QString &mimeType, int weight, const QString &pattern);
- QStringList m_matchingMimeTypes;
+ QStringList m_matchingMimeTypes; // only those with highest weight
+ QStringList m_allMatchingMimeTypes;
int m_weight;
int m_matchingPatternLength;
QString m_foundSuffix;
@@ -153,7 +154,7 @@ public:
void addGlob(const QMimeGlobPattern &glob);
void removeMimeType(const QString &mimeType);
- QStringList matchingGlobs(const QString &fileName, QString *foundSuffix) const;
+ QMimeGlobMatchResult matchingGlobs(const QString &fileName) const;
void clear();
PatternsMap m_fastPatterns; // example: "doc" -> "application/msword", "text/plain"