summaryrefslogtreecommitdiff
path: root/gst/typefind
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2020-10-17 10:42:49 +0300
committerSebastian Dröge <sebastian@centricular.com>2020-10-17 10:42:49 +0300
commit3036521fb6f0f6fc86e5c893837d936e2675e58b (patch)
tree50759f88d9c3ddcea880a2a226e2451075181460 /gst/typefind
parent967e650937bc7ba3692f7dc1031554d8961b8823 (diff)
downloadgstreamer-plugins-base-3036521fb6f0f6fc86e5c893837d936e2675e58b.tar.gz
typefind/xdgmime: Validate mimetypes to be valid GstStructure names before using them
On macOS, for example, "text/*" can be returned as mimetype for plaintext files but we don't allow '*' in structure names and this would cause critical warnings. It's a valid mimetype but not a valid structure name. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/616 Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/875>
Diffstat (limited to 'gst/typefind')
-rw-r--r--gst/typefind/gsttypefindfunctions.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/gst/typefind/gsttypefindfunctions.c b/gst/typefind/gsttypefindfunctions.c
index cbb0312c9..3ef051c56 100644
--- a/gst/typefind/gsttypefindfunctions.c
+++ b/gst/typefind/gsttypefindfunctions.c
@@ -5404,6 +5404,26 @@ vivo_type_find (GstTypeFind * tf, gpointer unused)
/*** XDG MIME typefinder (to avoid false positives mostly) ***/
#ifdef USE_GIO
+static gboolean
+xdgmime_validate_name (const gchar * name)
+{
+ const gchar *s;
+
+ if (G_UNLIKELY (!g_ascii_isalpha (*name))) {
+ return FALSE;
+ }
+
+ /* FIXME: test name string more */
+ s = &name[1];
+ while (*s && (g_ascii_isalnum (*s) || strchr ("/-_.:+", *s) != NULL))
+ s++;
+ if (G_UNLIKELY (*s != '\0')) {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
static void
xdgmime_typefind (GstTypeFind * find, gpointer user_data)
{
@@ -5448,6 +5468,12 @@ xdgmime_typefind (GstTypeFind * find, gpointer user_data)
return;
}
+ if (!xdgmime_validate_name (mimetype)) {
+ GST_LOG ("Ignoring mimetype with invalid structure name");
+ g_free (mimetype);
+ return;
+ }
+
/* Again, we mainly want the xdg typefinding to prevent false-positives on
* non-media formats, so suggest the type with a probability that trumps
* uncertain results of our typefinders, but not more than that. */