mountoperation: Free user_widgets list upon dialog destruction
authorCorey Berla <corey@berla.me>
Mon, 25 Jul 2022 03:55:22 +0000 (20:55 -0700)
committerCorey Berla <corey@berla.me>
Mon, 25 Jul 2022 13:54:14 +0000 (06:54 -0700)
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
gtk/gtkmountoperation.c

index 87f26478492517056468c323fcc3c93e2cdd8205..90383811a1fdc7cd1c3a6478d96c6d40d82029a9 100644 (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));