The struct container should always be there, evene if it will contain an
empty dict.
---

Got the exact same issue in src/peer.c, and it was verified when dbus is built
with --enable-checks --enables-aserts

 vpn/vpn-provider.c | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/vpn/vpn-provider.c b/vpn/vpn-provider.c
index 16c0c2b..f4e8783 100644
--- a/vpn/vpn-provider.c
+++ b/vpn/vpn-provider.c
@@ -149,24 +149,25 @@ empty_dict:
 static void append_routes(DBusMessageIter *iter, void *user_data)
 {
        GHashTable *routes = user_data;
+       DBusMessageIter container;
        GHashTableIter hash;
        gpointer value, key;
 
+       dbus_message_iter_open_container(iter, DBUS_TYPE_STRUCT,
+                                                       NULL, &container);
+
        if (!routes) {
-               append_route(iter, NULL);
-               return;
+               append_route(&container, NULL);
+               goto out;
        }
 
        g_hash_table_iter_init(&hash, routes);
 
-       while (g_hash_table_iter_next(&hash, &key, &value)) {
-               DBusMessageIter dict;
+       while (g_hash_table_iter_next(&hash, &key, &value))
+               append_route(&container, value);
 
-               dbus_message_iter_open_container(iter, DBUS_TYPE_STRUCT, NULL,
-                                               &dict);
-               append_route(&dict, value);
-               dbus_message_iter_close_container(iter, &dict);
-       }
+out:
+       dbus_message_iter_close_container(iter, &container);
 }
 
 static void send_routes(struct vpn_provider *provider, GHashTable *routes,
-- 
1.8.5.5

_______________________________________________
connman mailing list
[email protected]
https://lists.connman.net/mailman/listinfo/connman

Reply via email to