user-accounts: Fix password dialog crashes

Currently, the password_entry_timeout() callback can be called even after
the dialog disposal, which leads to segfaults. This is because the
corresponding source ids can be cleared in some cases without removing
the sources. Let's prevent direct calls of password_entry_timeout()
without destroying the source ids in order to fix this issue.

Fixes: https://gitlab.gnome.org/GNOME/gnome-control-center/issues/760
This commit is contained in:
Ondrej Holy 2019-11-08 16:10:47 +01:00 committed by Robert Ancell
parent 5bf43b92ac
commit 29367abbb0
2 changed files with 8 additions and 4 deletions

View file

@ -336,6 +336,11 @@ password_entry_key_press_cb (CcPasswordDialog *self,
{
GdkEventKey *key = (GdkEventKey *)event;
if (self->password_entry_timeout_id != 0) {
g_source_remove (self->password_entry_timeout_id);
self->password_entry_timeout_id = 0;
}
if (key->keyval == GDK_KEY_Tab)
password_entry_timeout (self);
@ -476,7 +481,6 @@ cc_password_dialog_class_init (CcPasswordDialogClass *klass)
gtk_widget_class_bind_template_callback (widget_class, password_entry_focus_out_cb);
gtk_widget_class_bind_template_callback (widget_class, password_entry_icon_press_cb);
gtk_widget_class_bind_template_callback (widget_class, password_entry_key_press_cb);
gtk_widget_class_bind_template_callback (widget_class, password_entry_timeout);
gtk_widget_class_bind_template_callback (widget_class, verify_entry_changed);
}

View file

@ -81,7 +81,7 @@
<property name="activates_default">True</property>
<property name="input_purpose">password</property>
<signal name="notify::text" handler="verify_entry_changed" object="CcPasswordDialog" swapped="yes"/>
<signal name="activate" handler="password_entry_timeout" object="CcPasswordDialog" swapped="yes"/>
<signal name="activate" handler="password_entry_focus_out_cb" object="CcPasswordDialog" swapped="yes"/>
<signal name="focus-out-event" handler="password_entry_focus_out_cb" after="yes" object="CcPasswordDialog" swapped="yes"/>
</object>
<packing>
@ -181,7 +181,7 @@
<property name="activates_default">True</property>
<property name="input_purpose">password</property>
<signal name="notify::text" handler="password_entry_changed" object="CcPasswordDialog" swapped="yes"/>
<signal name="activate" handler="password_entry_timeout" object="CcPasswordDialog" swapped="yes"/>
<signal name="activate" handler="password_entry_focus_out_cb" object="CcPasswordDialog" swapped="yes"/>
<signal name="focus-out-event" handler="password_entry_focus_out_cb" after="yes" object="CcPasswordDialog" swapped="yes"/>
<signal name="key-press-event" handler="password_entry_key_press_cb" object="CcPasswordDialog" swapped="yes"/>
<signal name="icon-press" handler="password_entry_icon_press_cb" object="CcPasswordDialog" swapped="yes"/>
@ -237,7 +237,7 @@
<property name="margin_bottom">12</property>
<property name="input_purpose">password</property>
<signal name="notify::text" handler="old_password_entry_changed" object="CcPasswordDialog" swapped="yes"/>
<signal name="activate" handler="password_entry_timeout" object="CcPasswordDialog" swapped="yes"/>
<signal name="activate" handler="old_password_entry_focus_out_cb" object="CcPasswordDialog" swapped="yes"/>
<signal name="focus-out-event" handler="old_password_entry_focus_out_cb" after="yes" object="CcPasswordDialog" swapped="yes"/>
</object>
<packing>