diff options
author | Alban Crequy <alban.crequy@collabora.co.uk> | 2014-07-28 17:32:16 +0100 |
---|---|---|
committer | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2014-09-05 16:45:23 +0100 |
commit | 7b81cf6445b0802c582dfca4a7e5afec5c9c389e (patch) | |
tree | b085c717901edb6993699ae5e38d1c2cd2f8ed64 /dbus | |
parent | 52e42240ed11a1aeb1e6b6d1c77497e620b36015 (diff) | |
download | dbus-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.c | 11 |
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 |