Fix various memory leaks when checking D-Bus signatures
authorMike Gorse <mgorse@suse.com>
Sat, 19 Jul 2014 20:35:52 +0000 (15:35 -0500)
committerMike Gorse <mgorse@suse.com>
Sat, 19 Jul 2014 20:35:52 +0000 (15:35 -0500)
atspi/atspi-misc.c
atspi/atspi-table-cell.c

index c52fe9f..aa2fb66 100644 (file)
@@ -1359,13 +1359,16 @@ void
 _atspi_dbus_set_interfaces (AtspiAccessible *accessible, DBusMessageIter *iter)
 {
   DBusMessageIter iter_array;
+  char *iter_sig = dbus_message_iter_get_signature (iter);
 
   accessible->interfaces = 0;
-  if (strcmp (dbus_message_iter_get_signature (iter), "as") != 0)
+  if (strcmp (iter_sig, "as") != 0)
   {
     g_warning ("_atspi_dbus_set_interfaces: Passed iterator with invalid signature %s", dbus_message_iter_get_signature (iter));
+    dbus_free (iter_sig);
     return;
   }
+  dbus_free (iter_sig);
   dbus_message_iter_recurse (iter, &iter_array);
   while (dbus_message_iter_get_arg_type (&iter_array) != DBUS_TYPE_INVALID)
   {
@@ -1721,22 +1724,30 @@ _atspi_dbus_update_cache_from_dict (AtspiAccessible *accessible, DBusMessageIter
     }
     else if (!strcmp (key, "Attributes"))
     {
+      char *iter_sig = dbus_message_iter_get_signature (&iter_variant);
       val = g_new0 (GValue, 1);;
       g_value_init (val, G_TYPE_HASH_TABLE);
-      if (strcmp (dbus_message_iter_get_signature (&iter_variant),
-                                                   "a{ss}") != 0)
+      if (strcmp (iter_sig, "a{ss}") != 0)
+      {
+        dbus_free (iter_sig);
         break;
+      }
+      dbus_free (iter_sig);
       g_value_take_boxed (val, _atspi_dbus_hash_from_iter (&iter_variant));
     }
     else if (!strcmp (key, "Component.ScreenExtents"))
     {
       dbus_int32_t d_int;
       AtspiRect extents;
+      char *iter_sig = dbus_message_iter_get_signature (&iter_variant);
       val = g_new0 (GValue, 1);;
       g_value_init (val, ATSPI_TYPE_RECT);
-      if (strcmp (dbus_message_iter_get_signature (&iter_variant),
-                                                   "(iiii)") != 0)
+      if (strcmp (iter_sig, "(iiii)") != 0)
+      {
+        dbus_free (iter_sig);
         break;
+      }
+      dbus_free (iter_sig);
       dbus_message_iter_recurse (&iter_variant, &iter_struct);
       dbus_message_iter_get_basic (&iter_struct, &d_int);
       extents.x = d_int;
index 44ff4d0..f99ac85 100644 (file)
@@ -179,6 +179,7 @@ atspi_table_cell_get_position (AtspiTableCell *obj,
   DBusMessage *reply;
   DBusMessageIter iter, iter_struct, iter_variant;
   dbus_int32_t d_row = -1, d_column = -1;
+  char *iter_sig;
 
   g_return_val_if_fail (obj != NULL, -1);
 
@@ -193,9 +194,14 @@ atspi_table_cell_get_position (AtspiTableCell *obj,
     return FALSE;
 
   dbus_message_iter_recurse (&iter, &iter_variant);
+  iter_sig = dbus_message_iter_get_signature (&iter_variant);
   /* TODO: Also report error here */
-  if (strcmp (dbus_message_iter_get_signature (&iter_variant), "(ii)") != 0)
+  if (strcmp (iter_sig, "(ii)") != 0)
+  {
+    dbus_free (iter_sig);
     return FALSE;
+  }
+  dbus_free (iter_sig);
 
   dbus_message_iter_recurse (&iter_variant, &iter_struct);
   dbus_message_iter_get_basic (&iter_struct, &d_row);