summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJie Jiang <jiejiang@chromium.org>2020-08-25 23:37:42 -0700
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2020-08-27 10:52:15 -0700
commit670951028dc417361db6a2536d2d9a38f0ae783d (patch)
treeb375b9135d60b41e17feed7c47a7c7f32cde2888 /src
parent2b480bd5660bc27b9340118c87b47acbbc6e109d (diff)
downloadbluez-670951028dc417361db6a2536d2d9a38f0ae783d.tar.gz
gatt: Accept empty array in parse_includes()
Currently parse_includes() will return false if the "Includes" property is an empty array. Empty array in the "Includes" property should be treated as valid.
Diffstat (limited to 'src')
-rw-r--r--src/gatt-database.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/gatt-database.c b/src/gatt-database.c
index 07d567078..e7e4a36a6 100644
--- a/src/gatt-database.c
+++ b/src/gatt-database.c
@@ -2008,6 +2008,7 @@ static bool parse_includes(GDBusProxy *proxy, struct external_service *service)
DBusMessageIter iter;
DBusMessageIter array;
char *obj;
+ int type;
/* Includes property is optional */
if (!g_dbus_proxy_get_property(proxy, "Includes", &iter))
@@ -2018,9 +2019,9 @@ static bool parse_includes(GDBusProxy *proxy, struct external_service *service)
dbus_message_iter_recurse(&iter, &array);
- do {
- if (dbus_message_iter_get_arg_type(&array) !=
- DBUS_TYPE_OBJECT_PATH)
+ while ((type = dbus_message_iter_get_arg_type(&array))
+ != DBUS_TYPE_INVALID) {
+ if (type != DBUS_TYPE_OBJECT_PATH)
return false;
dbus_message_iter_get_basic(&array, &obj);
@@ -2028,11 +2029,12 @@ static bool parse_includes(GDBusProxy *proxy, struct external_service *service)
if (!queue_push_tail(service->includes, obj)) {
error("Failed to add Includes path in queue\n");
return false;
-
}
incr_attr_count(service, 1);
- } while (dbus_message_iter_next(&array));
+
+ dbus_message_iter_next(&array);
+ }
return true;
}