From 4a2b93e6c00ffd8ae7adc84ee7a05b3a22a8a4d1 Mon Sep 17 00:00:00 2001 From: cmjthomas Date: Mon, 10 May 2021 11:06:25 +1000 Subject: [PATCH] Work around for GCC 8.3.1 memset bug memset returns an incorrect address when compiled under gcc 8.3.1 with optimizations. ref https://bugzilla.redhat.com/show_bug.cgi?id=1958715 This work-around doesn't rely upon the returned value --- src/dns.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/dns.c b/src/dns.c index 15ff335..7ef5fbe 100644 --- a/src/dns.c +++ b/src/dns.c @@ -8203,7 +8203,8 @@ static int dns_ai_setent(struct addrinfo **ent, union dns_any *any, enum dns_typ switch (type) { case DNS_T_A: - saddr = memset(&sin, '\0', sizeof sin); + memset(&sin, '\0', sizeof sin); + saddr = &sin; sin.sin_family = AF_INET; sin.sin_port = htons(ai->port); @@ -8212,7 +8213,8 @@ static int dns_ai_setent(struct addrinfo **ent, union dns_any *any, enum dns_typ break; case DNS_T_AAAA: - saddr = memset(&sin6, '\0', sizeof sin6); + memset(&sin6, '\0', sizeof sin6); + saddr = &sin6; sin6.sin6_family = AF_INET6; sin6.sin6_port = htons(ai->port);