[vlc-devel] [PATCH] dbus: decode uri when sending PropertiesChanged
Rémi Denis-Courmont
remi at remlab.net
Tue Sep 30 16:51:22 UTC 2025
Le 30 septembre 2025 10:32:31 GMT+03:00, Conor Smith <conormartindale at gmail.com> a écrit :
>Also updated out of date links to dbus and mpris documentation
>---
> modules/control/dbus/dbus.c | 21 +++++++++++++++------
> 1 file changed, 15 insertions(+), 6 deletions(-)
>
>diff --git a/modules/control/dbus/dbus.c b/modules/control/dbus/dbus.c
>index cc7eae5d6e..a102ae825c 100644
>--- a/modules/control/dbus/dbus.c
>+++ b/modules/control/dbus/dbus.c
>@@ -27,14 +27,14 @@
>
> /*
> * D-Bus Specification:
>- * http://dbus.freedesktop.org/doc/dbus-specification.html
>+ * https://dbus.freedesktop.org/doc/dbus-specification.html
> * D-Bus low-level C API (libdbus)
>- * http://dbus.freedesktop.org/doc/dbus/api/html/index.html
>+ * https://dbus.freedesktop.org/doc/api/html/
> * extract:
> * "If you use this low-level API directly, you're signing up for some pain."
> *
>- * MPRIS Specification version 1.0
>- * http://wiki.xmms2.xmms.se/index.php/MPRIS
>+ * MPRIS Specification:
>+ * https://specifications.freedesktop.org/mpris-spec/latest/
> */
>
> /*****************************************************************************
>@@ -61,6 +61,7 @@
> #include <vlc_meta.h>
> #include <vlc_tick.h>
> #include <vlc_fs.h>
>+#include <vlc_url.h>
>
> #include <assert.h>
> #include <limits.h>
>@@ -1394,11 +1395,17 @@ int GetInputMeta(size_t index, vlc_playlist_item_t *item, DBusMessageIter *args)
> dbus_int64_t i_mtime = input_item_GetDuration( p_input );
> dbus_uint32_t i_time = i_mtime / 1000000;
> dbus_int64_t i_length = i_mtime / 1000;
>- char *psz_trackid;
>+ char *psz_trackid, *psz_uri, *decoded_uri;
>
> if (asprintf(&psz_trackid, MPRIS_TRACKID_FORMAT, index) == -1)
> return VLC_ENOMEM;
>
>+ psz_uri = input_item_GetURI(p_input);
>+ if((decoded_uri = vlc_uri_decode_duplicate(psz_uri)))
>+ free(psz_uri);
>+ else
>+ decoded_uri = psz_uri;
That can't be right. Decoding a URI is a non-reversible operation that potentially corrupts the URI. It only makes sense for display purpose, really.
Also we don't accept patches via email any longer.
>+
> const char* ppsz_meta_items[] =
> {
> "mpris:trackid", "xesam:url", "xesam:title", "xesam:artist",
>@@ -1414,7 +1421,7 @@ int GetInputMeta(size_t index, vlc_playlist_item_t *item, DBusMessageIter *args)
> dbus_message_iter_open_container( args, DBUS_TYPE_ARRAY, "{sv}", &dict );
>
> ADD_META( 0, DBUS_TYPE_OBJECT_PATH, psz_trackid );
>- ADD_VLC_META_STRING( 1, URI );
>+ ADD_META( 1, DBUS_TYPE_STRING, decoded_uri);
> ADD_VLC_META_STRING( 2, Title );
> ADD_META_SINGLETON_STRING_LIST( 3, Artist );
> ADD_VLC_META_STRING( 4, Album );
>@@ -1438,6 +1445,8 @@ int GetInputMeta(size_t index, vlc_playlist_item_t *item, DBusMessageIter *args)
> ADD_VLC_META_STRING( 25, URL );
>
> free( psz_trackid );
>+ if(decoded_uri != NULL)
>+ free( decoded_uri );
>
> vlc_mutex_lock( &p_input->lock );
> if( p_input->p_meta )
More information about the vlc-devel
mailing list