diff --git a/src/inet.c b/src/inet.c index cd7749684..620be5a35 100644 --- a/src/inet.c +++ b/src/inet.c @@ -151,19 +151,19 @@ int uv_inet_pton(int af, const char* src, void* dst) { case AF_INET: return (inet_pton4(src, dst)); case AF_INET6: { - int len; - char tmp[UV__INET6_ADDRSTRLEN], *s, *p; - s = (char*) src; + const char *p; p = strchr(src, '%'); if (p != NULL) { - s = tmp; + int len; + char s[UV__INET6_ADDRSTRLEN]; len = p - src; if (len > UV__INET6_ADDRSTRLEN-1) return UV_EINVAL; memcpy(s, src, len); s[len] = '\0'; - } - return inet_pton6(s, dst); + return inet_pton6(s, dst); + } else + return inet_pton6(src, dst); } default: return UV_EAFNOSUPPORT;