[pulseaudio-commits] src/modules src/pulsecore

Tanu Kaskinen tanuk at kemper.freedesktop.org
Fri Mar 23 14:31:16 UTC 2018


 src/modules/module-stream-restore.c |    7 ++++++-
 src/pulsecore/dbus-util.c           |    7 ++++++-
 src/pulsecore/protocol-dbus.c       |    8 ++++++--
 3 files changed, 18 insertions(+), 4 deletions(-)

New commits:
commit 605b2bbc41c7dd450896c3a9d73e46a75f150b7e
Author: Jungsup Lee <jungsup4.lee at samsung.com>
Date:   Fri Mar 23 17:26:36 2018 +0900

    Fix memory leaks
    
    The returned string of the dbus_message_iter_get_signature() must be
    freed with dbus_free().

diff --git a/src/modules/module-stream-restore.c b/src/modules/module-stream-restore.c
index 7ee53340..e562e4ed 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_se(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..d5d5f7e1 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_se(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..31a48d19 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). */
@@ -431,7 +431,7 @@ static enum find_result_t find_handler_from_properties_call(struct call_info *ca
 
         dbus_message_iter_recurse(&msg_iter, &call_info->variant_iter);
 
-        call_info->property_sig = dbus_message_iter_get_signature(&call_info->variant_iter);
+        pa_assert_se(call_info->property_sig = dbus_message_iter_get_signature(&call_info->variant_iter));
 
         if (*call_info->property_interface) {
             if (!(call_info->iface_entry = pa_hashmap_get(call_info->obj_entry->interfaces, call_info->property_interface)))
@@ -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;
 }
 



More information about the pulseaudio-commits mailing list