From: Jacob Nevins Date: Sun, 8 Nov 2009 18:25:29 +0000 (+0000) Subject: Improve buffer handling in Windows sk_getaddr() -- we were passing X-Git-Tag: 0.61~113 X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=commitdiff_plain;h=06497952debbf53b9e0269ff649daf34f49d7898;p=PuTTY.git 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). [originally from svn r8737] --- 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) {