From: Matthias Clasen Date: Thu, 11 Feb 2021 14:14:34 +0000 (-0500) Subject: placesview: Avoid use-after-free X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1~1^2~83^2^2~414^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=95d48ac2e81df1f382669e4795cc3a9de151a252;p=gtk4.git placesview: Avoid use-after-free The places view has questionable code for handling 'destroy', which seems to trigger use-after-free in some cases. Clean this up a bit by acknowledging the cancellation fully, rather than relying on the destroyed flag. --- diff --git a/gtk/gtkplacesview.c b/gtk/gtkplacesview.c index aec0ddea60..4d26337155 100644 --- a/gtk/gtkplacesview.c +++ b/gtk/gtkplacesview.c @@ -986,9 +986,14 @@ network_enumeration_next_files_finished (GObject *source_object, if (error) { - if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) - g_warning ("Failed to fetch network locations: %s", error->message); + if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) + { + g_clear_error (&error); + g_object_unref (view); + return; + } + g_warning ("Failed to fetch network locations: %s", error->message); g_clear_error (&error); } else @@ -999,16 +1004,11 @@ network_enumeration_next_files_finished (GObject *source_object, g_list_free_full (detected_networks, g_object_unref); } - g_object_unref (view); + update_network_state (view); + monitor_network (view); + update_loading (view); - /* avoid to update widgets if we are already destroyed - (and got cancelled s a result of that) */ - if (!view->destroyed) - { - update_network_state (view); - monitor_network (view); - update_loading (view); - } + g_object_unref (view); } static void