diff options
author | Mike Gorse <mgorse@suse.com> | 2014-07-19 15:35:52 -0500 |
---|---|---|
committer | Mike Gorse <mgorse@suse.com> | 2014-07-19 15:35:52 -0500 |
commit | 4c0da161e7af297b34ca7fc31bd44c12baf78636 (patch) | |
tree | da462726b8ef218a8540930ffdffd7cdb683b45e | |
parent | 925201dab4159ddce3ba29615223e6070123160a (diff) | |
download | at-spi2-core-4c0da161e7af297b34ca7fc31bd44c12baf78636.tar.gz |
Fix various memory leaks when checking D-Bus signatures
-rw-r--r-- | atspi/atspi-misc.c | 21 | ||||
-rw-r--r-- | atspi/atspi-table-cell.c | 8 |
2 files changed, 23 insertions, 6 deletions
diff --git a/atspi/atspi-misc.c b/atspi/atspi-misc.c index c52fe9fc..aa2fb66e 100644 --- a/atspi/atspi-misc.c +++ b/atspi/atspi-misc.c @@ -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; diff --git a/atspi/atspi-table-cell.c b/atspi/atspi-table-cell.c index 44ff4d03..f99ac854 100644 --- a/atspi/atspi-table-cell.c +++ b/atspi/atspi-table-cell.c @@ -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); |