mountoperation: Free user_widgets list upon dialog destruction

There's a list user_widgets that contains all of the entries and
selections during authentication.  This is only freed  upon
finalizing the GtkMountOperation.  It's possible (and true for the
GVFS SMB implementation) that a MountOperation can have the
gtk_mount_operation_ask_password_do_gtk () function called multiple
times (i.e. bad password).  The user_widgets list grows with now
invalid pointers to old widgets (causing unexpected behavior and
seg faults).

Free the user_widgets list upon dialog destruction, we don't need it
anymore.

Fixes: https://gitlab.gnome.org/GNOME/gtk/-/issues/5059
Fixes: https://gitlab.gnome.org/GNOME/gtk/-/issues/5058
This commit is contained in:
Corey Berla 2022-07-24 20:55:22 -07:00
parent dd5d1030b5
commit 111929593a

View File

@ -400,6 +400,10 @@ pw_dialog_got_response (GtkDialog *dialog,
else
g_mount_operation_reply (op, G_MOUNT_OPERATION_ABORTED);
if (priv->user_widgets)
g_list_free (priv->user_widgets);
priv->user_widgets = NULL;
priv->dialog = NULL;
g_object_notify (G_OBJECT (op), "is-showing");
gtk_window_destroy (GTK_WINDOW (dialog));