=== modified file 'src/dbus.c' --- src/dbus.c 2013-08-04 14:53:22 +0000 +++ src/dbus.c 2014-06-08 16:06:49 +0000 @@ -243,22 +243,27 @@ else if (dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_BYTE) { unsigned char p[sizeof(struct in6_addr)]; - unsigned int i; + unsigned int i = 0; + int valid = 0; skip = 1; - for(i = 0; i < sizeof(struct in6_addr); i++) + while (1) { + if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_BYTE) + break; dbus_message_iter_get_basic(&iter, &p[i]); dbus_message_iter_next (&iter); - if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_BYTE) - break; + if (++i == sizeof(struct in6_addr)) { + valid = 1; + break; + } } #ifndef HAVE_IPV6 my_syslog(LOG_WARNING, _("attempt to set an IPv6 server address via DBus - no IPv6 support")); #else - if (i == sizeof(struct in6_addr)-1) + if (valid) { memcpy(&addr.in6.sin6_addr, p, sizeof(struct in6_addr)); #ifdef HAVE_SOCKADDR_SA_LEN