Commit de3713cb28bb2916b110137c988c7dc1ba7a9c8d
1 parent
0e4d7b85
Exists in
master
and in
2 other branches
Disabling toolbar and header bar on invalid gsettings object to avoid
segfaults.
Showing
3 changed files
with
24 additions
and
3 deletions
Show diff stats
src/objects/application/application.c
@@ -175,8 +175,17 @@ | @@ -175,8 +175,17 @@ | ||
175 | 175 | ||
176 | static gboolean on_user_interface(const gchar G_GNUC_UNUSED(*option), const gchar *value, gpointer G_GNUC_UNUSED(dunno), GError **error) { | 176 | static gboolean on_user_interface(const gchar G_GNUC_UNUSED(*option), const gchar *value, gpointer G_GNUC_UNUSED(dunno), GError **error) { |
177 | 177 | ||
178 | - g_autoptr(GSettings) app_settings = pw3270_application_settings_new(); | 178 | + g_autoptr(GSettings) app_settings = pw3270_application_settings_new(); |
179 | + if(!app_settings) { | ||
180 | + g_warning("Can't get application settings"); | ||
181 | + return FALSE; | ||
182 | + } | ||
183 | + | ||
179 | g_autoptr(GSettings) win_settings = pw3270_application_window_settings_new(); | 184 | g_autoptr(GSettings) win_settings = pw3270_application_window_settings_new(); |
185 | + if(!win_settings) { | ||
186 | + g_warning("Can't get window settings"); | ||
187 | + return FALSE; | ||
188 | + } | ||
180 | 189 | ||
181 | if(!g_ascii_strcasecmp(value,"gnome")) { | 190 | if(!g_ascii_strcasecmp(value,"gnome")) { |
182 | 191 |
src/objects/toolbar/settings.c
@@ -222,10 +222,16 @@ | @@ -222,10 +222,16 @@ | ||
222 | return GTK_WIDGET(settings); | 222 | return GTK_WIDGET(settings); |
223 | } | 223 | } |
224 | 224 | ||
225 | - void load(GtkWidget G_GNUC_UNUSED(*widget), GSettings *settings, PW3270SettingsPage *page) { | 225 | + void load(GtkWidget *widget, GSettings *settings, PW3270SettingsPage *page) { |
226 | 226 | ||
227 | size_t ix; | 227 | size_t ix; |
228 | 228 | ||
229 | + if(!G_IS_SETTINGS(settings)) { | ||
230 | + g_warning("The settings object is not valid, disabling dialog to avoid segfaults"); | ||
231 | + gtk_widget_set_sensitive(widget,FALSE); | ||
232 | + return; | ||
233 | + } | ||
234 | + | ||
229 | // Populate views | 235 | // Populate views |
230 | Pw3270ActionList * action_list = pw3270_action_list_new(GTK_APPLICATION(g_application_get_default())); | 236 | Pw3270ActionList * action_list = pw3270_action_list_new(GTK_APPLICATION(g_application_get_default())); |
231 | 237 |
src/objects/window/header-settings.c
@@ -102,7 +102,13 @@ | @@ -102,7 +102,13 @@ | ||
102 | return GTK_WIDGET(settings); | 102 | return GTK_WIDGET(settings); |
103 | } | 103 | } |
104 | 104 | ||
105 | - void load(GtkWidget G_GNUC_UNUSED(*widget), GSettings *settings, PW3270SettingsPage *page) { | 105 | + void load(GtkWidget *widget, GSettings *settings, PW3270SettingsPage *page) { |
106 | + | ||
107 | + if(!G_IS_SETTINGS(settings)) { | ||
108 | + g_warning("The settings object is not valid, disabling dialog to avoid segfaults"); | ||
109 | + gtk_widget_set_sensitive(widget,FALSE); | ||
110 | + return; | ||
111 | + } | ||
106 | 112 | ||
107 | // Get avaliable actions. | 113 | // Get avaliable actions. |
108 | Pw3270ActionList * action_list = pw3270_action_list_new(GTK_APPLICATION(g_application_get_default())); | 114 | Pw3270ActionList * action_list = pw3270_action_list_new(GTK_APPLICATION(g_application_get_default())); |