From 709883cf99eee0c5a7643b677731decc88b3fce8 Mon Sep 17 00:00:00 2001 From: Matthias Andree Date: Tue, 21 Mar 2006 22:08:35 +0000 Subject: Work around C libraries that return a NULL in getaddrinfo()'s ai_canonname record, to avoid a segfault. Affects, for instance, FreeBSD 4.11. Reported and patched by "Voldemar" via fetchmail-users@. svn path=/branches/BRANCH_6-3/; revision=4750 --- driver.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'driver.c') diff --git a/driver.c b/driver.c index 1d39f068..f58779f5 100644 --- a/driver.c +++ b/driver.c @@ -1028,7 +1028,15 @@ static int do_session( else { xfree(ctl->server.truename); - ctl->server.truename = xstrdup(res->ai_canonname); + /* Older FreeBSD versions return NULL in ai_canonname + * if they cannot canonicalize, rather than copying + * the queryname here, as IEEE Std 1003.1-2001 + * requires. Work around NULL. */ + if (res->ai_canonname != NULL) { + ctl->server.truename = xstrdup(res->ai_canonname); + } else { + ctl->server.truename = xstrdup(ctl->server.queryname); + } ctl->server.trueaddr = (struct sockaddr *)xmalloc(res->ai_addrlen); ctl->server.trueaddr_len = res->ai_addrlen; memcpy(ctl->server.trueaddr, res->ai_addr, res->ai_addrlen); -- cgit v1.2.3