From 4752a9c3791f27e80801398e92b5bfcadecfd574 Mon Sep 17 00:00:00 2001 From: Thierry HUCHARD Date: Tue, 29 Dec 2020 12:37:38 +0100 Subject: [PATCH] added support for ipv6. Fixes a possible memory overflow. --- backend/escl/escl_devices.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/backend/escl/escl_devices.c b/backend/escl/escl_devices.c index 92e064b97..17e7a5499 100644 --- a/backend/escl/escl_devices.c +++ b/backend/escl/escl_devices.c @@ -53,16 +53,20 @@ static int count_finish = 0; */ static void resolve_callback(AvahiServiceResolver *r, AVAHI_GCC_UNUSED AvahiIfIndex interface, - AVAHI_GCC_UNUSED AvahiProtocol protocol, - AvahiResolverEvent event, const char *name, + AvahiProtocol protocol, + AvahiResolverEvent event, + const char *name, const char __sane_unused__ *type, const char __sane_unused__ *domain, const char __sane_unused__ *host_name, - const AvahiAddress *address, uint16_t port, AvahiStringList *txt, + const AvahiAddress *address, + uint16_t port, + AvahiStringList *txt, AvahiLookupResultFlags __sane_unused__ flags, void __sane_unused__ *userdata) { - char a[AVAHI_ADDRESS_STR_MAX], *t; + char a[(AVAHI_ADDRESS_STR_MAX + 2)] = { 0 }; + char *t; const char *is; const char *uuid; AvahiStringList *s; @@ -71,7 +75,13 @@ resolve_callback(AvahiServiceResolver *r, AVAHI_GCC_UNUSED AvahiIfIndex interfac case AVAHI_RESOLVER_FAILURE: break; case AVAHI_RESOLVER_FOUND: - avahi_address_snprint(a, sizeof(a), address); + if (protocol == AVAHI_PROTO_INET6) { + char b[AVAHI_ADDRESS_STR_MAX] = { 0 }; + avahi_address_snprint(b, sizeof(b), address); + snprintf(a, sizeof(a), "[%s]", b); + } + else + avahi_address_snprint(a, sizeof(a), address); t = avahi_string_list_to_string(txt); if (strstr(t, "\"rs=eSCL\"") || strstr(t, "\"rs=/eSCL\"")) { char ip_add[PATH_MAX] = {0};