The returned string of the dbus_message_iter_get_signature() must be freed with dbus_free(). --- src/modules/module-stream-restore.c | 7 ++++++- src/pulsecore/dbus-util.c | 7 ++++++- src/pulsecore/protocol-dbus.c | 6 +++++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/modules/module-stream-restore.c b/src/modules/module-stream-restore.c index 7ee53340..8483065c 100644 --- a/src/modules/module-stream-restore.c +++ b/src/modules/module-stream-restore.c @@ -346,14 +346,19 @@ 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); + pa_assert(signature = dbus_message_iter_get_signature(iter)); + pa_assert(pa_streq(signature, "a(uu)")); + + dbus_free(signature); + pa_channel_map_init(map); pa_cvolume_init(vol); diff --git a/src/pulsecore/dbus-util.c b/src/pulsecore/dbus-util.c index 80e2866e..b022543d 100644 --- a/src/pulsecore/dbus-util.c +++ b/src/pulsecore/dbus-util.c @@ -735,6 +735,7 @@ void pa_dbus_append_proplist_variant_dict_entry(DBusMessageIter *dict_iter, cons pa_proplist *pa_dbus_get_proplist_arg(DBusConnection *c, DBusMessage *msg, DBusMessageIter *iter) { DBusMessageIter dict_iter; DBusMessageIter dict_entry_iter; + char *signature; pa_proplist *proplist = NULL; const char *key = NULL; const uint8_t *value = NULL; @@ -743,7 +744,11 @@ pa_proplist *pa_dbus_get_proplist_arg(DBusConnection *c, DBusMessage *msg, DBusM pa_assert(c); pa_assert(msg); pa_assert(iter); - pa_assert(pa_streq(dbus_message_iter_get_signature(iter), "a{say}")); + + pa_assert(signature = dbus_message_iter_get_signature(iter)); + pa_assert(pa_streq(signature, "a{say}")); + + dbus_free(signature); proplist = pa_proplist_new(); diff --git a/src/pulsecore/protocol-dbus.c b/src/pulsecore/protocol-dbus.c index 59afc1ab..c8a84589 100644 --- a/src/pulsecore/protocol-dbus.c +++ b/src/pulsecore/protocol-dbus.c @@ -313,7 +313,7 @@ struct call_info { const char *property_interface; /* The interface argument of a property call is stored here. */ pa_dbus_property_handler *property_handler; const char *expected_property_sig; /* Property signature from the introspection data. */ - const char *property_sig; /* The signature of the new value in the received .Set message. */ + char *property_sig; /* The signature of the new value in the received .Set message. */ DBusMessageIter variant_iter; /* Iterator pointing to the beginning of the new value variant of a .Set call. */ const char *method; /* Method name (extracted from the message). */ @@ -494,6 +494,7 @@ static enum find_result_t find_handler(struct call_info *call_info) { static DBusHandlerResult handle_message_cb(DBusConnection *connection, DBusMessage *message, void *user_data) { pa_dbus_protocol *p = user_data; struct call_info call_info; + call_info.property_sig = NULL; pa_assert(connection); pa_assert(message); @@ -588,6 +589,9 @@ static DBusHandlerResult handle_message_cb(DBusConnection *connection, DBusMessa } finish: + if (call_info.property_sig) + dbus_free(call_info.property_sig); + return DBUS_HANDLER_RESULT_HANDLED; } -- 2.13.GIT