[pulseaudio-discuss] [PATCH] Fix memory leaks

Tanu Kaskinen tanuk at iki.fi
Mon Mar 19 19:51:17 UTC 2018


On Fri, 2018-03-16 at 19:40 +0900, Jungsup Lee wrote:
> The returned string of the dbus_message_iter_get_signature() must be freed with dbus_free().
> ---
>  src/modules/module-stream-restore.c | 8 +++++++-
>  src/pulsecore/dbus-util.c           | 8 +++++++-
>  src/pulsecore/protocol-dbus.c       | 6 +++++-
>  3 files changed, 19 insertions(+), 3 deletions(-)
> 
> diff --git a/src/modules/module-stream-restore.c b/src/modules/module-stream-restore.c
> index 7ee53340..162d5fef 100644
> --- a/src/modules/module-stream-restore.c
> +++ b/src/modules/module-stream-restore.c
> @@ -346,14 +346,20 @@ static void dbus_entry_free(struct dbus_entry *de) {
>  static int get_volume_arg(DBusConnection *conn, DBusMessage *msg, DBusMessageIter *iter, pa_channel_map *map, pa_cvolume *vol) {
>      DBusMessageIter array_iter;
>      DBusMessageIter struct_iter;
> +    char *signature;
>  
>      pa_assert(conn);
>      pa_assert(msg);
>      pa_assert(iter);
> -    pa_assert(pa_streq(dbus_message_iter_get_signature(iter), "a(uu)"));
>      pa_assert(map);
>      pa_assert(vol);
>  
> +    signature = dbus_message_iter_get_signature(iter);
> +    pa_assert(pa_streq(signature, "a(uu)"));
> +
> +    if (signature)
> +        dbus_free(signature);

pa_streq() expects non-NULL parameters, but signature can be NULL.
Passing NULL to pa_streq() will probably segfault. That's not a
catastrophe, since the assertion would be expected to crash anyway, but
it's still better to crash due to an assertion failure than segfault.

I suggest this:

    pa_assert_se(signature = dbus_message_iter_get_signature(iter));

That way we know that signature is always non-NULL in subsequent code,
and the "if (signature)" check can be removed too.

-- 
Tanu

https://liberapay.com/tanuk
https://www.patreon.com/tanuk


More information about the pulseaudio-discuss mailing list