From: jacob Date: Sun, 8 Nov 2009 18:25:29 +0000 (+0000) Subject: Improve buffer handling in Windows sk_getaddr() -- we were passing X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/commitdiff_plain/1c51badd393b183d62b45a9a83db56e0b0601086 Improve buffer handling in Windows sk_getaddr() -- we were passing uninitialised storage into WSAAddressToString()'s length function (and presumably getting away with it by luck). Also improve error handling (exposed by my Wine installation, which returns an error from WSAAddressToString() for connections to localhost for some reason). git-svn-id: svn://svn.tartarus.org/sgt/putty@8737 cda61777-01e9-0310-a592-d414129be87e --- diff --git a/windows/winnet.c b/windows/winnet.c index 061f72b1..9d93baa0 100644 --- a/windows/winnet.c +++ b/windows/winnet.c @@ -584,13 +584,19 @@ void sk_getaddr(SockAddr addr, char *buf, int buflen) #ifndef NO_IPV6 if (step.ai) { + int err = 0; if (p_WSAAddressToStringA) { - DWORD dwbuflen; - p_WSAAddressToStringA(step.ai->ai_addr, step.ai->ai_addrlen, - NULL, buf, &dwbuflen); - buflen = dwbuflen; + DWORD dwbuflen = buflen; + err = p_WSAAddressToStringA(step.ai->ai_addr, step.ai->ai_addrlen, + NULL, buf, &dwbuflen); } else - strncpy(buf, "IPv6", buflen); + err = -1; + if (err) { + strncpy(buf, addr->hostname, buflen); + if (!buf[0]) + strncpy(buf, "", buflen); + buf[buflen-1] = '\0'; + } } else #endif if (SOCKADDR_FAMILY(addr, step) == AF_INET) {