提交 50513df6 编写于 作者: R robm

8080819: Inet4AddressImpl regression caused by JDK-7180557

Reviewed-by: michaelm
Contributed-by: brian.toal@gmail.com
上级 570e2616
...@@ -144,7 +144,7 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, ...@@ -144,7 +144,7 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
jobjectArray ret = 0; jobjectArray ret = 0;
int retLen = 0; int retLen = 0;
int error=0; int getaddrinfo_error=0;
struct addrinfo hints, *res, *resNew = NULL; struct addrinfo hints, *res, *resNew = NULL;
if (!initializeInetClasses(env)) if (!initializeInetClasses(env))
...@@ -172,22 +172,23 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, ...@@ -172,22 +172,23 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
return NULL; return NULL;
} }
getaddrinfo_error = getaddrinfo(hostname, NULL, &hints, &res);
#ifdef MACOSX #ifdef MACOSX
/* If we're looking up the local machine, bypass DNS lookups and get if (getaddrinfo_error) {
* address from getifaddrs. // If getaddrinfo fails try getifaddrs.
*/ ret = lookupIfLocalhost(env, hostname, JNI_FALSE);
ret = lookupIfLocalhost(env, hostname, JNI_FALSE); if (ret != NULL || (*env)->ExceptionCheck(env)) {
if (ret != NULL || (*env)->ExceptionCheck(env)) { JNU_ReleaseStringPlatformChars(env, host, hostname);
JNU_ReleaseStringPlatformChars(env, host, hostname); return ret;
return ret; }
} }
#endif #endif
error = getaddrinfo(hostname, NULL, &hints, &res); if (getaddrinfo_error) {
if (error) {
/* report error */ /* report error */
ThrowUnknownHostExceptionWithGaiError(env, hostname, error); ThrowUnknownHostExceptionWithGaiError(
env, hostname, getaddrinfo_error);
JNU_ReleaseStringPlatformChars(env, host, hostname); JNU_ReleaseStringPlatformChars(env, host, hostname);
return NULL; return NULL;
} else { } else {
......
...@@ -296,7 +296,7 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, ...@@ -296,7 +296,7 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
jobjectArray ret = 0; jobjectArray ret = 0;
int retLen = 0; int retLen = 0;
int error=0; int getaddrinfo_error=0;
#ifdef AF_INET6 #ifdef AF_INET6
struct addrinfo hints, *res, *resNew = NULL; struct addrinfo hints, *res, *resNew = NULL;
#endif /* AF_INET6 */ #endif /* AF_INET6 */
...@@ -311,19 +311,6 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, ...@@ -311,19 +311,6 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
hostname = JNU_GetStringPlatformChars(env, host, JNI_FALSE); hostname = JNU_GetStringPlatformChars(env, host, JNI_FALSE);
CHECK_NULL_RETURN(hostname, NULL); 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 #ifdef AF_INET6
/* Try once, with our static buffer. */ /* Try once, with our static buffer. */
memset(&hints, 0, sizeof(hints)); memset(&hints, 0, sizeof(hints));
...@@ -343,11 +330,27 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, ...@@ -343,11 +330,27 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
} }
#endif #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 */ /* report error */
ThrowUnknownHostExceptionWithGaiError(env, hostname, error); ThrowUnknownHostExceptionWithGaiError(
env, hostname, getaddrinfo_error);
JNU_ReleaseStringPlatformChars(env, host, hostname); JNU_ReleaseStringPlatformChars(env, host, hostname);
return NULL; return NULL;
} else { } else {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册