From 50513df6999bd28d23c14c79fb046f41a5ed77fd Mon Sep 17 00:00:00 2001 From: robm Date: Thu, 11 Jun 2015 13:08:06 +0100 Subject: [PATCH] 8080819: Inet4AddressImpl regression caused by JDK-7180557 Reviewed-by: michaelm Contributed-by: brian.toal@gmail.com --- .../native/java/net/Inet4AddressImpl.c | 25 +++++++------ .../native/java/net/Inet6AddressImpl.c | 37 ++++++++++--------- 2 files changed, 33 insertions(+), 29 deletions(-) diff --git a/src/solaris/native/java/net/Inet4AddressImpl.c b/src/solaris/native/java/net/Inet4AddressImpl.c index ea67245f0..c8fb98737 100644 --- a/src/solaris/native/java/net/Inet4AddressImpl.c +++ b/src/solaris/native/java/net/Inet4AddressImpl.c @@ -144,7 +144,7 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, jobjectArray ret = 0; int retLen = 0; - int error=0; + int getaddrinfo_error=0; struct addrinfo hints, *res, *resNew = NULL; if (!initializeInetClasses(env)) @@ -172,22 +172,23 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, return NULL; } + getaddrinfo_error = getaddrinfo(hostname, NULL, &hints, &res); + #ifdef MACOSX - /* If we're looking up the local machine, bypass DNS lookups and get - * address from getifaddrs. - */ - ret = lookupIfLocalhost(env, hostname, JNI_FALSE); - if (ret != NULL || (*env)->ExceptionCheck(env)) { - JNU_ReleaseStringPlatformChars(env, host, hostname); - return ret; + if (getaddrinfo_error) { + // If getaddrinfo fails try getifaddrs. + ret = lookupIfLocalhost(env, hostname, JNI_FALSE); + if (ret != NULL || (*env)->ExceptionCheck(env)) { + JNU_ReleaseStringPlatformChars(env, host, hostname); + return ret; + } } #endif - error = getaddrinfo(hostname, NULL, &hints, &res); - - if (error) { + if (getaddrinfo_error) { /* report error */ - ThrowUnknownHostExceptionWithGaiError(env, hostname, error); + ThrowUnknownHostExceptionWithGaiError( + env, hostname, getaddrinfo_error); JNU_ReleaseStringPlatformChars(env, host, hostname); return NULL; } else { diff --git a/src/solaris/native/java/net/Inet6AddressImpl.c b/src/solaris/native/java/net/Inet6AddressImpl.c index eab898d1a..9850bb32c 100644 --- a/src/solaris/native/java/net/Inet6AddressImpl.c +++ b/src/solaris/native/java/net/Inet6AddressImpl.c @@ -296,7 +296,7 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, jobjectArray ret = 0; int retLen = 0; - int error=0; + int getaddrinfo_error=0; #ifdef AF_INET6 struct addrinfo hints, *res, *resNew = NULL; #endif /* AF_INET6 */ @@ -311,19 +311,6 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, hostname = JNU_GetStringPlatformChars(env, host, JNI_FALSE); CHECK_NULL_RETURN(hostname, NULL); -#ifdef MACOSX - /* - * If we're looking up the local machine, attempt to get the address - * from getifaddrs. This ensures we get an IPv6 address for the local - * machine. - */ - ret = lookupIfLocalhost(env, hostname, JNI_TRUE); - if (ret != NULL || (*env)->ExceptionCheck(env)) { - JNU_ReleaseStringPlatformChars(env, host, hostname); - return ret; - } -#endif - #ifdef AF_INET6 /* Try once, with our static buffer. */ memset(&hints, 0, sizeof(hints)); @@ -343,11 +330,27 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, } #endif - error = getaddrinfo(hostname, NULL, &hints, &res); + getaddrinfo_error = getaddrinfo(hostname, NULL, &hints, &res); + +#ifdef MACOSX + if (getaddrinfo_error) { + /* + * If getaddrinfo fails looking up the local machine, attempt to get the + * address from getifaddrs. This ensures we get an IPv6 address for the + * local machine. + */ + ret = lookupIfLocalhost(env, hostname, JNI_TRUE); + if (ret != NULL || (*env)->ExceptionCheck(env)) { + JNU_ReleaseStringPlatformChars(env, host, hostname); + return ret; + } + } +#endif - if (error) { + if (getaddrinfo_error) { /* report error */ - ThrowUnknownHostExceptionWithGaiError(env, hostname, error); + ThrowUnknownHostExceptionWithGaiError( + env, hostname, getaddrinfo_error); JNU_ReleaseStringPlatformChars(env, host, hostname); return NULL; } else { -- GitLab