summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Gorse <mgorse@suse.com>2012-11-15 13:20:22 -0600
committerMike Gorse <mgorse@suse.com>2012-12-07 11:51:12 -0600
commit930e3a8d15011600132c2302234acb410b54f88f (patch)
treee1f381718d0fe24c4fab4dde66370101b09a7d7e
parentb896e582c19bf98d0b936c252a56b6025ca7e828 (diff)
downloadat-spi2-core-930e3a8d15011600132c2302234acb410b54f88f.tar.gz
[registry] Fix crash handling DeregisterKeystrokeListener
-rw-r--r--registryd/deviceeventcontroller.c30
1 files changed, 24 insertions, 6 deletions
diff --git a/registryd/deviceeventcontroller.c b/registryd/deviceeventcontroller.c
index b14cd1e7..19c6df5c 100644
--- a/registryd/deviceeventcontroller.c
+++ b/registryd/deviceeventcontroller.c
@@ -1041,12 +1041,25 @@ append_keystroke_listener (DBusMessageIter *iter, DEControllerKeyListener *liste
if (dbus_message_iter_open_container (&iter_struct, DBUS_TYPE_STRUCT,
NULL, &iter_substruct))
{
- dbus_message_iter_append_basic (&iter_substruct, DBUS_TYPE_BOOLEAN,
- &listener->mode->synchronous);
- dbus_message_iter_append_basic (&iter_substruct, DBUS_TYPE_BOOLEAN,
- &listener->mode->preemptive);
- dbus_message_iter_append_basic (&iter_substruct, DBUS_TYPE_BOOLEAN,
- &listener->mode->global);
+ if (listener->mode)
+ {
+ dbus_message_iter_append_basic (&iter_substruct, DBUS_TYPE_BOOLEAN,
+ &listener->mode->synchronous);
+ dbus_message_iter_append_basic (&iter_substruct, DBUS_TYPE_BOOLEAN,
+ &listener->mode->preemptive);
+ dbus_message_iter_append_basic (&iter_substruct, DBUS_TYPE_BOOLEAN,
+ &listener->mode->global);
+ }
+ else
+ {
+ dbus_bool_t dummy_val = FALSE;
+ dbus_message_iter_append_basic (&iter_substruct, DBUS_TYPE_BOOLEAN,
+ &dummy_val);
+ dbus_message_iter_append_basic (&iter_substruct, DBUS_TYPE_BOOLEAN,
+ &dummy_val);
+ dbus_message_iter_append_basic (&iter_substruct, DBUS_TYPE_BOOLEAN,
+ &dummy_val);
+ }
dbus_message_iter_close_container (&iter_struct, &iter_substruct);
}
dbus_message_iter_close_container (iter, &iter_struct);
@@ -2353,6 +2366,11 @@ impl_deregister_keystroke_listener (DBusConnection *bus,
dbus_message_iter_init(message, &iter);
if (strcmp (dbus_message_get_signature (message), "oa(iisi)uu") != 0)
+ {
+ g_warning ("Received DeregisterKeystrokeListener with strange signature '%s'", dbus_message_get_signature (message));
+ return invalid_arguments_error (message);
+ }
+
dbus_message_iter_get_basic(&iter, &path);
dbus_message_iter_next(&iter);
dbus_message_iter_recurse(&iter, &iter_array);