Socket's implementation of ref_state_set to return empty sets instead of NULL
authorMario Sanchez Prada <msanchez@igalia.com>
Fri, 28 Oct 2011 18:30:42 +0000 (20:30 +0200)
committerMario Sanchez Prada <msanchez@igalia.com>
Fri, 28 Oct 2011 19:24:26 +0000 (21:24 +0200)
Calls to atk_object_ref_state_set() are expected to return a valid
state set always, so it would be better if this implementation of
socket's ref_state_set() returned empty sets instead of just NULL, to
avoid calling to atk_state_set_*() functions over invalid instances of
AtkStateSet (e.g. add_pending_items() in accessible-cache.c).

https://bugs.freedesktop.org/show_bug.cgi?id=42350

atk-adaptor/bridge.c

index d049731..a1ee202 100644 (file)
@@ -334,17 +334,19 @@ socket_ref_state_set (AtkObject *accessible)
   DBusMessageIter iter, iter_array;
   AtkStateSet *set;
 
+  set = atk_state_set_new ();
+
   if (!socket->embedded_plug_id)
-    return NULL;
+    return set;
 
   child_name = g_strdup (socket->embedded_plug_id);
   if (!child_name)
-    return NULL;
+    return set;
   child_path = g_utf8_strchr (child_name + 1, -1, ':');
   if (!child_path)
     {
       g_free (child_name);
-      return NULL;
+      return set;
     }
   *(child_path++) = '\0';
   message = dbus_message_new_method_call (child_name, child_path, ATSPI_DBUS_INTERFACE_ACCESSIBLE, "GetState");
@@ -352,15 +354,13 @@ socket_ref_state_set (AtkObject *accessible)
   reply = dbus_connection_send_with_reply_and_block (spi_global_app_data->bus, message, 1, NULL);
   dbus_message_unref (message);
   if (reply == NULL)
-    return NULL;
+    return set;
   if (strcmp (dbus_message_get_signature (reply), "au") != 0)
     {
       dbus_message_unref (reply);
-      return NULL;
+      return set;
     }
-  set = atk_state_set_new ();
-  if (!set)
-    return  NULL;
+
   dbus_message_iter_init (reply, &iter);
   dbus_message_iter_recurse (&iter, &iter_array);
   do