summaryrefslogtreecommitdiff
path: root/dbus
diff options
context:
space:
mode:
authorAlban Crequy <alban.crequy@collabora.co.uk>2014-07-28 17:32:16 +0100
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2014-09-05 16:45:23 +0100
commit7b81cf6445b0802c582dfca4a7e5afec5c9c389e (patch)
treeb085c717901edb6993699ae5e38d1c2cd2f8ed64 /dbus
parent52e42240ed11a1aeb1e6b6d1c77497e620b36015 (diff)
downloaddbus-glib-7b81cf6445b0802c582dfca4a7e5afec5c9c389e.tar.gz
_dbus_gtype_from_signature_iter: fail gracefully with unknown message types
_dbus_gtype_from_signature_iter now returns G_TYPE_INVALID on unknown message types such as DBUS_TYPE_UNIX_FD or DBUS_TYPE_MAYBE. Symptoms: > arguments to dbus_signature_iter_recurse() were incorrect, assertion > "dbus_type_is_container (dbus_signature_iter_get_current_type (iter))" failed > in file ../../dbus/dbus-signature.c line 213. > This is normally a bug in some application using the D-Bus library. Bug: https://bugs.freedesktop.org/show_bug.cgi?id=80557 Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
Diffstat (limited to 'dbus')
-rw-r--r--dbus/dbus-gsignature.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/dbus/dbus-gsignature.c b/dbus/dbus-gsignature.c
index 46c9205..ed0880e 100644
--- a/dbus/dbus-gsignature.c
+++ b/dbus/dbus-gsignature.c
@@ -142,14 +142,16 @@ _dbus_gtype_from_signature_iter (DBusSignatureIter *iter, gboolean is_client)
int current_type;
current_type = dbus_signature_iter_get_current_type (iter);
- /* TODO: handle type 0? */
+
if (dbus_typecode_maps_to_basic (current_type))
return _dbus_gtype_from_basic_typecode (current_type);
else if (current_type == DBUS_TYPE_OBJECT_PATH)
return DBUS_TYPE_G_OBJECT_PATH;
else if (current_type == DBUS_TYPE_SIGNATURE)
return DBUS_TYPE_G_SIGNATURE;
- else
+ else if (current_type == DBUS_TYPE_VARIANT ||
+ current_type == DBUS_TYPE_ARRAY ||
+ current_type == DBUS_TYPE_STRUCT)
{
DBusSignatureIter subiter;
@@ -178,6 +180,11 @@ _dbus_gtype_from_signature_iter (DBusSignatureIter *iter, gboolean is_client)
return G_TYPE_INVALID;
}
}
+ else
+ {
+ /* dbus-glib does not handle DBUS_TYPE_UNIX_FD or DBUS_TYPE_MAYBE */
+ return G_TYPE_INVALID;
+ }
}
GType