summaryrefslogtreecommitdiff
path: root/libpurple/media
diff options
context:
space:
mode:
authorElliott Sales de Andrade <qulogic@pidgin.im>2021-10-26 04:07:42 -0500
committerElliott Sales de Andrade <qulogic@pidgin.im>2021-10-26 04:07:42 -0500
commit11ad0f601f4a3674ef63d8559a0fbc96df4322fc (patch)
treeda4288760518015366871aede91df76d2d6ec739 /libpurple/media
parentcc5481543c887803fed078ad91b289cd67a2019d (diff)
downloadpidgin-11ad0f601f4a3674ef63d8559a0fbc96df4322fc.tar.gz
Fix possible leak when creating FarStream stream
The relay info is created before some early returns, but without being freed there. It can be created within a condition where it's really needed instead. Then telling the GValue to take it means we don't need to free it ourselves.
Diffstat (limited to 'libpurple/media')
-rw-r--r--libpurple/media/backend-fs2.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/libpurple/media/backend-fs2.c b/libpurple/media/backend-fs2.c
index 519a688886..f0e96e7a09 100644
--- a/libpurple/media/backend-fs2.c
+++ b/libpurple/media/backend-fs2.c
@@ -1891,7 +1891,6 @@ create_stream(PurpleMediaBackendFs2 *self,
we need to do this to allow them to override when using non-standard
TURN modes, like Google f.ex. */
gboolean got_turn_from_protocol = FALSE;
- GPtrArray *relay_info = g_ptr_array_new_full (1, (GDestroyNotify) gst_structure_free);
gboolean ret;
session = get_session(self, sess_id);
@@ -1955,6 +1954,7 @@ create_stream(PurpleMediaBackendFs2 *self,
}
if (turn_ip && purple_strequal("nice", transmitter) && !got_turn_from_protocol) {
+ GPtrArray *relay_info = g_ptr_array_new_full(1, (GDestroyNotify)gst_structure_free);
gint port;
const gchar *username = purple_prefs_get_string(
"/purple/network/turn_username");
@@ -1994,7 +1994,7 @@ create_stream(PurpleMediaBackendFs2 *self,
"Setting relay-info on new stream\n");
value = g_new(GValue, 1);
g_value_init(value, G_TYPE_PTR_ARRAY);
- g_value_set_boxed(value, relay_info);
+ g_value_take_boxed(value, relay_info);
our_values = g_list_prepend(our_values, value);
g_hash_table_insert(our_params, "relay-info", value);
}
@@ -2008,8 +2008,6 @@ create_stream(PurpleMediaBackendFs2 *self,
our_values = g_list_delete_link(our_values, our_values);
}
g_hash_table_destroy(our_params);
- if (relay_info)
- g_ptr_array_unref (relay_info);
if (ret == FALSE) {
purple_debug_error("backend-fs2",
"Could not set transmitter %s: %s.\n",