[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