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?ds=sidebyside 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) {