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 175  
176 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 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 190 if(!g_ascii_strcasecmp(value,"gnome")) {
182 191  
... ...
src/objects/toolbar/settings.c
... ... @@ -222,10 +222,16 @@
222 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 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 235 // Populate views
230 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 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 113 // Get avaliable actions.
108 114 Pw3270ActionList * action_list = pw3270_action_list_new(GTK_APPLICATION(g_application_get_default()));
... ...