From ec846dfedde7931689ff0a56be5ba75a5aefc9ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= Date: Mon, 5 Feb 2024 21:16:51 +0100 Subject: [PATCH] fix SEGFAULT on early exit with IPv6 enabled MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Some command line options, like e.g -V, will cause conserver to exit before the IPv6 address variables are initialized. Avoid the calls to freeaddrinfo() in these cases. Signed-off-by: Bjørn Mork --- conserver/main.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/conserver/main.c b/conserver/main.c index 8130d03..5035712 100644 --- a/conserver/main.c +++ b/conserver/main.c @@ -53,8 +53,8 @@ int fAll = 0, fNoinit = 0, fVersion = 0, fStrip = 0, fReopen = char *pcConfig = CONFIGFILE; int cMaxMemb = MAXMEMB; #if USE_IPV6 -struct addrinfo *bindAddr; -struct addrinfo *bindBaseAddr; +struct addrinfo *bindAddr = (struct addrinfo *)0; +struct addrinfo *bindBaseAddr = (struct addrinfo *)0; #else in_addr_t bindAddr = INADDR_ANY; unsigned short bindPort; @@ -781,8 +781,10 @@ DestroyDataStructures(void) #if USE_IPV6 /* clean up addrinfo stucts */ - freeaddrinfo(bindAddr); - freeaddrinfo(bindBaseAddr); + if ((struct addrinfo *)0 != bindAddr) + freeaddrinfo(bindAddr); + if ((struct addrinfo *)0 != bindBaseAddr) + freeaddrinfo(bindBaseAddr); #else if (myAddrs != (struct in_addr *)0) free(myAddrs);