diff --git a/src/lib/clapper/clapper-media-item.c b/src/lib/clapper/clapper-media-item.c index cffd2f55..ad43c99e 100644 --- a/src/lib/clapper/clapper-media-item.c +++ b/src/lib/clapper/clapper-media-item.c @@ -54,6 +54,7 @@ struct _ClapperMediaItem /* Whether using title from URI */ gboolean title_is_parsed; + GType redirects_src_type; gchar *redirect_uri; gchar *cache_uri; @@ -684,6 +685,8 @@ static inline gboolean clapper_media_item_set_redirect_uri (ClapperMediaItem *self, const gchar *redirect_uri, GstObject *redirect_src) { + GType src_type; + /* Safety checks */ if (G_UNLIKELY (!redirect_uri)) { GST_ERROR_OBJECT (self, "Received redirect request without an URI set"); @@ -694,6 +697,18 @@ clapper_media_item_set_redirect_uri (ClapperMediaItem *self, const gchar *redire return FALSE; } + /* Only allow redirects determined by the same source type, otherwise + * we would start mixing URIs when multiple sources message them */ + src_type = G_OBJECT_TYPE (redirect_src); + + if (self->redirects_src_type == 0) { + self->redirects_src_type = src_type; + } else if (self->redirects_src_type != src_type) { + GST_LOG_OBJECT (self, "Ignoring redirection from different source: %s", + G_OBJECT_TYPE_NAME (redirect_src)); + return FALSE; + } + g_set_str (&self->redirect_uri, redirect_uri); GST_DEBUG_OBJECT (self, "Set redirect URI: \"%s\", source: %s", self->redirect_uri, G_OBJECT_TYPE_NAME (redirect_src));