inspector: Be safer when handling actions
authorMatthias Clasen <mclasen@redhat.com>
Fri, 7 Apr 2023 12:52:51 +0000 (08:52 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 21 Apr 2023 07:08:02 +0000 (09:08 +0200)
Those query apis are serious about not ignoring
their return value, and may not set their our
arguments to anything if they return FALSE.

gtk/inspector/action-editor.c
gtk/inspector/actions.c

index 616a592096f4f0b5cc96ba48adb43888c178445d..29cdec122fb4561e1ab36c963c4780c139a6103c 100644 (file)
@@ -185,18 +185,36 @@ action_state_changed_cb (GActionGroup             *group,
 static void
 update_widgets (GtkInspectorActionEditor *r)
 {
-  GVariant *state = NULL;
+  GVariant *state;
 
   if (G_IS_ACTION_GROUP (r->owner))
-    g_action_group_query_action (G_ACTION_GROUP (r->owner), r->name,
-                                 &r->enabled, &r->parameter_type, NULL, NULL,
-                                 &state);
+    {
+      if (!g_action_group_query_action (G_ACTION_GROUP (r->owner), r->name,
+                                        &r->enabled, &r->parameter_type, NULL, NULL,
+                                        &state))
+        {
+          r->enabled = FALSE;
+          r->parameter_type = NULL;
+          state = NULL;
+        }
+    }
   else if (GTK_IS_ACTION_MUXER (r->owner))
-    gtk_action_muxer_query_action (GTK_ACTION_MUXER (r->owner), r->name,
-                                   &r->enabled, &r->parameter_type, NULL, NULL,
-                                   &state);
+    {
+      if (!gtk_action_muxer_query_action (GTK_ACTION_MUXER (r->owner), r->name,
+                                          &r->enabled, &r->parameter_type, NULL, NULL,
+                                          &state))
+        {
+          r->enabled = FALSE;
+          r->parameter_type = NULL;
+          state = NULL;
+        }
+    }
   else
-    state = NULL;
+    {
+      r->enabled = FALSE;
+      r->parameter_type = NULL;
+      state = NULL;
+    }
 
   gtk_widget_set_sensitive (r->activate_button, r->enabled);
   gtk_widget_set_sensitive (r->parameter_entry, r->enabled);
index eb979bfd0cfd4560ac7ce026a94a98fe5fe0a60c..a5d06fa7a23fac273a82c5bf115a4b7ee1281f14 100644 (file)
@@ -136,9 +136,10 @@ bind_enabled_cb (GtkSignalListItemFactory *factory,
   name = action_holder_get_name (ACTION_HOLDER (item));
   if (G_IS_ACTION_GROUP (owner))
     enabled = g_action_group_get_action_enabled (G_ACTION_GROUP (owner), name);
-  else if (GTK_IS_ACTION_MUXER (owner))
-    gtk_action_muxer_query_action (GTK_ACTION_MUXER (owner), name,
-                                   &enabled, NULL, NULL, NULL, NULL);
+  else if (!GTK_IS_ACTION_MUXER (owner) ||
+           !gtk_action_muxer_query_action (GTK_ACTION_MUXER (owner), name,
+                                           &enabled, NULL, NULL, NULL, NULL))
+    enabled = FALSE;
 
   gtk_label_set_label (GTK_LABEL (label), enabled ? "+" : "-");
 }