[vlc-devel] [PATCH 1/1] Return DBus error message instead of infinite loop

Rémi Denis-Courmont remi at remlab.net
Sun Apr 19 08:04:20 CEST 2020


Le sunnuntaina 19. huhtikuuta 2020, 2.35.53 EEST Jorge Bellon-Castro a écrit :
> From: Jorge Bellon Castro <jbelloncastro at gmail.com>
> 
> Avoid infinite loop and return DBus error message when handling
> GetMetadata DBus function call containing invalid track ids.
> ---
>  modules/control/dbus/dbus_common.h    |  6 ++++++
>  modules/control/dbus/dbus_tracklist.c | 15 +++++++++------
>  2 files changed, 15 insertions(+), 6 deletions(-)
> 
> diff --git a/modules/control/dbus/dbus_common.h
> b/modules/control/dbus/dbus_common.h index 7cb82212bc..ee7d3a9d88 100644
> --- a/modules/control/dbus/dbus_common.h
> +++ b/modules/control/dbus/dbus_common.h
> @@ -60,6 +60,12 @@
>      dbus_message_unref( p_msg ); \
>      return DBUS_HANDLER_RESULT_HANDLED
> 
> +#define REPLY_ERROR( error, msg_format, ... ) \
> +    dbus_message_unref( p_msg ); \
> +    p_msg = dbus_message_new_error_printf( p_from, error, msg_format, \
> +        __VA_ARGS__ ); \
> +    if ( !p_msg ) return DBUS_HANDLER_RESULT_NEED_MEMORY;
> +
>  #define SIGNAL_INIT( interface, path, signal ) \
>      DBusMessage *p_msg = dbus_message_new_signal( path, \
>          interface, signal ); \
> diff --git a/modules/control/dbus/dbus_tracklist.c
> b/modules/control/dbus/dbus_tracklist.c index a2e4119c2b..1435bc5702 100644
> --- a/modules/control/dbus/dbus_tracklist.c
> +++ b/modules/control/dbus/dbus_tracklist.c
> @@ -139,18 +139,21 @@ DBUS_METHOD( GetTracksMetadata )
>          }
>          vlc_playlist_Unlock(playlist);
>          if (!id_valid)
> -        {
> -invalid_track_id:
> -            msg_Err( (vlc_object_t*) p_this, "Invalid track id: %s",
> -                                             psz_track_id );
> -            continue;
> -        }
> +            goto invalid_track_id;

If there's only one branch-to, you don't need to use goto.

Otherwise, looks good.

> 
>          dbus_message_iter_next( &track_ids );
>      }
> 
>      dbus_message_iter_close_container( &args, &meta );
>      REPLY_SEND;
> +
> +invalid_track_id:
> +    msg_Err( (vlc_object_t*) p_this, "Invalid track id: %s",
> +            psz_track_id );
> +    dbus_message_iter_abandon_container( &args, &meta );
> +    REPLY_ERROR( DBUS_ERROR_UNKNOWN_OBJECT, "Invalid track id: %s",
> +            psz_track_id );
> +    REPLY_SEND;
>  }
> 
>  DBUS_METHOD( GoTo )


-- 
Rémi Denis-Courmont
Tapiolan uusi kaupunki, Uudenmaan tasavalta





More information about the vlc-devel mailing list