From 246eb8ea25eeb183dfd6d3bd64d5b4d5106012ae Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 21 Apr 2024 21:59:48 -0400 Subject: [PATCH] gtk: Fix more ubsan warnings Most of these are calling a get_instance_private() function before checking that the object isn't NULL. --- gtk/gtkapplication.c | 4 +++- gtk/gtkcheckbutton.c | 4 +++- gtk/gtkimage.c | 2 +- gtk/gtktogglebutton.c | 4 +++- gtk/gtkwindow.c | 19 ++++++++++--------- 5 files changed, 20 insertions(+), 13 deletions(-) diff --git a/gtk/gtkapplication.c b/gtk/gtkapplication.c index b080f43715..0a2600085d 100644 --- a/gtk/gtkapplication.c +++ b/gtk/gtkapplication.c @@ -990,11 +990,13 @@ GtkActionMuxer * gtk_application_get_parent_muxer_for_window (GtkWindow *window) { GtkApplication *application = gtk_window_get_application (window); - GtkApplicationPrivate *priv = gtk_application_get_instance_private (application); + GtkApplicationPrivate *priv; if (!application) return NULL; + priv = gtk_application_get_instance_private (application); + return priv->muxer; } diff --git a/gtk/gtkcheckbutton.c b/gtk/gtkcheckbutton.c index aa5af6fcfa..9739fe533a 100644 --- a/gtk/gtkcheckbutton.c +++ b/gtk/gtkcheckbutton.c @@ -1006,7 +1006,7 @@ gtk_check_button_set_group (GtkCheckButton *self, GtkCheckButton *group) { GtkCheckButtonPrivate *priv = gtk_check_button_get_instance_private (self); - GtkCheckButtonPrivate *group_priv = gtk_check_button_get_instance_private (group); + GtkCheckButtonPrivate *group_priv; g_return_if_fail (GTK_IS_CHECK_BUTTON (self)); g_return_if_fail (self != group); @@ -1037,6 +1037,8 @@ gtk_check_button_set_group (GtkCheckButton *self, if (priv->group_next == group) return; + group_priv = gtk_check_button_get_instance_private (group); + priv->group_prev = NULL; if (group_priv->group_prev) { diff --git a/gtk/gtkimage.c b/gtk/gtkimage.c index 856f55c4ea..fa0d5f7d0e 100644 --- a/gtk/gtkimage.c +++ b/gtk/gtkimage.c @@ -637,7 +637,7 @@ resource_is_pixdata (const char *resource_path) if (data_size < sizeof(guint32)) goto out; - magic = (stream[0] << 24) + (stream[1] << 16) + (stream[2] << 8) + stream[3]; + magic = (((guint32)(stream[0])) << 24) | (((guint32)(stream[1])) << 16) | (((guint32)(stream[2])) << 8) | (guint32)(stream[3]); if (magic == GDK_PIXBUF_MAGIC_NUMBER) ret = TRUE; diff --git a/gtk/gtktogglebutton.c b/gtk/gtktogglebutton.c index 3f2dc468c6..66e944cc52 100644 --- a/gtk/gtktogglebutton.c +++ b/gtk/gtktogglebutton.c @@ -511,7 +511,7 @@ gtk_toggle_button_set_group (GtkToggleButton *toggle_button, GtkToggleButton *group) { GtkToggleButtonPrivate *priv = gtk_toggle_button_get_instance_private (toggle_button); - GtkToggleButtonPrivate *group_priv = gtk_toggle_button_get_instance_private (group); + GtkToggleButtonPrivate *group_priv; g_return_if_fail (GTK_IS_TOGGLE_BUTTON (toggle_button)); g_return_if_fail (toggle_button != group); @@ -538,6 +538,8 @@ gtk_toggle_button_set_group (GtkToggleButton *toggle_button, if (priv->group_next == group) return; + group_priv = gtk_toggle_button_get_instance_private (group); + priv->group_prev = NULL; if (group_priv->group_prev) { diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index 02ee4f3ccf..47d8132884 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -5835,19 +5835,20 @@ gtk_window_is_active (GtkWindow *window) GtkWindowGroup * gtk_window_get_group (GtkWindow *window) { - GtkWindowPrivate *priv = gtk_window_get_instance_private (window); + static GtkWindowGroup *default_group = NULL; - if (window && priv->group) - return priv->group; - else + if (window) { - static GtkWindowGroup *default_group = NULL; + GtkWindowPrivate *priv = gtk_window_get_instance_private (window); - if (!default_group) - default_group = gtk_window_group_new (); - - return default_group; + if (priv->group) + return priv->group; } + + if (!default_group) + default_group = gtk_window_group_new (); + + return default_group; } /**