gnetworkaddress: fix use-after-free for network address

This fixes an error where addr_enum can be used after finalization during
complete_queued_task().
This commit is contained in:
Christian Hergert 2019-01-23 19:08:49 -08:00 committed by Patrick Griffis
parent 2821ff0fd2
commit 4b2a60c73a

View File

@ -1120,12 +1120,17 @@ on_address_timeout (gpointer user_data)
{
GNetworkAddressAddressEnumerator *addr_enum = user_data;
/* Upon completion it may get unref'd by the owner */
g_object_ref (addr_enum);
/* If ipv6 didn't come in yet, just complete the task */
if (addr_enum->queued_task != NULL)
complete_queued_task (addr_enum, g_steal_pointer (&addr_enum->queued_task),
g_steal_pointer (&addr_enum->last_error));
g_clear_pointer (&addr_enum->wait_source, g_source_unref);
g_object_unref (addr_enum);
return G_SOURCE_REMOVE;
}