Commit de3713cb28bb2916b110137c988c7dc1ba7a9c8d

Authored by Perry Werneck
1 parent 0e4d7b85

Disabling toolbar and header bar on invalid gsettings object to avoid

segfaults.
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()));