1
0
mirror of https://gitlab.gnome.org/GNOME/nautilus synced 2024-07-02 16:31:15 +00:00

files-view: check if gdk_clipboard_read_value_async operation was cancelled

Nautilus crashes if the user with a cut selection rapidly opens then closes a tab.

This is because update_cut_status_callback is called after the files view has already been finalized. GIO guarantees that our callback will always be called even if we cancel the clipboard cancellable in dispose.

Check cancellation status in update_cut_status_callback and proceed no further if cancelled.
Fixes https://gitlab.gnome.org/GNOME/nautilus/-/issues/3434
This commit is contained in:
Gary Li 2024-05-15 14:46:32 -04:00
parent 09f4546d50
commit 800c690a9c

View File

@ -681,12 +681,23 @@ update_cut_status_callback (GObject *source_object,
GAsyncResult *res,
gpointer user_data)
{
NautilusFilesView *self = NAUTILUS_FILES_VIEW (user_data);
NautilusFilesViewPrivate *priv = nautilus_files_view_get_instance_private (self);
NautilusFilesView *self;
NautilusFilesViewPrivate *priv;
const GValue *value;
GList *cut_files = NULL;
g_autoptr (GError) error = NULL;
value = gdk_clipboard_read_value_finish (GDK_CLIPBOARD (source_object), res, &error);
if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
{
/* The files view has already been disposed, bailout */
return;
}
self = NAUTILUS_FILES_VIEW (user_data);
priv = nautilus_files_view_get_instance_private (self);
value = gdk_clipboard_read_value_finish (GDK_CLIPBOARD (source_object), res, NULL);
if (value != NULL &&
G_VALUE_HOLDS (value, NAUTILUS_TYPE_CLIPBOARD))
{