pidgin/pidgin

Fix possible leak when creating FarStream stream

2021-10-26, Elliott Sales de Andrade
3713c9a8813c
Parents 369cf83b4147
Children c357390f7c22
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.
--- a/libpurple/media/backend-fs2.c Tue Oct 26 04:07:42 2021 -0500
+++ b/libpurple/media/backend-fs2.c Tue Oct 26 04:07:42 2021 -0500
@@ -1891,7 +1891,6 @@
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 @@
}
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 @@
"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 @@
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",