From de3713cb28bb2916b110137c988c7dc1ba7a9c8d Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Thu, 28 Jan 2021 11:30:04 -0300 Subject: [PATCH] Disabling toolbar and header bar on invalid gsettings object to avoid segfaults. --- src/objects/application/application.c | 11 ++++++++++- src/objects/toolbar/settings.c | 8 +++++++- src/objects/window/header-settings.c | 8 +++++++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/objects/application/application.c b/src/objects/application/application.c index 7ae388f..77f5975 100644 --- a/src/objects/application/application.c +++ b/src/objects/application/application.c @@ -175,8 +175,17 @@ static gboolean on_user_interface(const gchar G_GNUC_UNUSED(*option), const gchar *value, gpointer G_GNUC_UNUSED(dunno), GError **error) { - g_autoptr(GSettings) app_settings = pw3270_application_settings_new(); + g_autoptr(GSettings) app_settings = pw3270_application_settings_new(); + if(!app_settings) { + g_warning("Can't get application settings"); + return FALSE; + } + g_autoptr(GSettings) win_settings = pw3270_application_window_settings_new(); + if(!win_settings) { + g_warning("Can't get window settings"); + return FALSE; + } if(!g_ascii_strcasecmp(value,"gnome")) { diff --git a/src/objects/toolbar/settings.c b/src/objects/toolbar/settings.c index f52b72c..038ecdb 100644 --- a/src/objects/toolbar/settings.c +++ b/src/objects/toolbar/settings.c @@ -222,10 +222,16 @@ return GTK_WIDGET(settings); } - void load(GtkWidget G_GNUC_UNUSED(*widget), GSettings *settings, PW3270SettingsPage *page) { + void load(GtkWidget *widget, GSettings *settings, PW3270SettingsPage *page) { size_t ix; + if(!G_IS_SETTINGS(settings)) { + g_warning("The settings object is not valid, disabling dialog to avoid segfaults"); + gtk_widget_set_sensitive(widget,FALSE); + return; + } + // Populate views Pw3270ActionList * action_list = pw3270_action_list_new(GTK_APPLICATION(g_application_get_default())); diff --git a/src/objects/window/header-settings.c b/src/objects/window/header-settings.c index 539ab6c..d65d956 100644 --- a/src/objects/window/header-settings.c +++ b/src/objects/window/header-settings.c @@ -102,7 +102,13 @@ return GTK_WIDGET(settings); } - void load(GtkWidget G_GNUC_UNUSED(*widget), GSettings *settings, PW3270SettingsPage *page) { + void load(GtkWidget *widget, GSettings *settings, PW3270SettingsPage *page) { + + if(!G_IS_SETTINGS(settings)) { + g_warning("The settings object is not valid, disabling dialog to avoid segfaults"); + gtk_widget_set_sensitive(widget,FALSE); + return; + } // Get avaliable actions. Pw3270ActionList * action_list = pw3270_action_list_new(GTK_APPLICATION(g_application_get_default())); -- libgit2 0.21.2