From a3a100bf6b221dae3bf8144b3bfe7ed39740f357 Mon Sep 17 00:00:00 2001 From: Daniel Wagner Date: Wed, 31 Oct 2012 10:33:35 +0100 Subject: [PATCH] session: parse_bearers() should check for invalid types --- src/session.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/session.c b/src/session.c index 85ce909..caa2901 100644 --- a/src/session.c +++ b/src/session.c @@ -390,15 +390,22 @@ static int parse_bearers(DBusMessageIter *iter, GSList **list) { struct connman_session_bearer *bearer; DBusMessageIter array; - int err; + int type, err; dbus_message_iter_recurse(iter, &array); *list = NULL; - while (dbus_message_iter_get_arg_type(&array) == DBUS_TYPE_STRING) { + while ((type = dbus_message_iter_get_arg_type(&array)) != + DBUS_TYPE_INVALID) { char *bearer_name = NULL; + if (type != DBUS_TYPE_STRING) { + connman_session_free_bearers(*list); + *list = NULL; + return -EINVAL; + } + dbus_message_iter_get_basic(&array, &bearer_name); bearer = g_try_new0(struct connman_session_bearer, 1); -- 2.7.4