Code Review Request: 7084032: test/java/net/Inet6Address/B6558853.java fails on Windows XP/2003 if IPv6 enabled (original) (raw)
Kurchi Hazra kurchi.subhra.hazra at oracle.com
Thu Sep 1 08:13:32 PDT 2011
- Previous message: hg: jdk8/tl/jdk: 7041800: URI.equals may incorrectly return true with escaped octets
- Next message: Code Review Request: 7084032: test/java/net/Inet6Address/B6558853.java fails on Windows XP/2003 if IPv6 enabled
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hi,
test/java/net/Inet6Address/B6558853.java tests if the address obtained from getHostAddress() on connections using IPv6 link-local addresses contains the zone id. For Inet6Address.getHostAddress() to return the zone id, Inet6Address.scope_id_set needs to be set to true in addition to setting the appropriate Inet6Address.scope_id. In case of Windows XP/2003 with IPv6 enabled, the native socket implementation of socketAccept() method in src/windows/native/java/net/TwoStacksPlainSocketImpl.c does not set the scope_id_set to true which causes the zone id not to be returned, and B6558853 throws a RuntimeException.
The fix is to simply set the scopeidsetID in socketAccept() method to true if the scope_id is greater than 0.
Submitting hg diff:
diff --git a/src/windows/native/java/net/TwoStacksPlainSocketImpl.c b/src/windows/native/java/net/TwoStacksPlainSocketImpl.c --- a/src/windows/native/java/net/TwoStacksPlainSocketImpl.c +++ b/src/windows/native/java/net/TwoStacksPlainSocketImpl.c @@ -576,6 +576,7 @@ Java_java_net_TwoStacksPlainSocketImpl_s { /* fields on this */ jint port;
- jint scope; jint timeout = (*env)->GetIntField(env, this, psi_timeoutID); jobject fdObj = (*env)->GetObjectField(env, this, psi_fdID); jobject fd1Obj = (*env)->GetObjectField(env, this, psi_fd1ID); @@ -755,7 +756,11 @@ Java_java_net_TwoStacksPlainSocketImpl_s addr = (*env)->GetObjectField (env, socketAddressObj, ia6_ipaddressID); (*env)->SetByteArrayRegion (env, addr, 0, 16, (const char *)&him.him6.sin6_addr); (*env)->SetIntField(env, socketAddressObj, ia_familyID, IPv6);
(*env)->SetIntField(env, socketAddressObj, ia6_scopeidID, him.him6.sin6_scope_id);
scope=him.him6.sin6_scope_id;
(*env)->SetIntField(env, socketAddressObj, ia6_scopeidID, scope);
if(scope>0) {
(*env)->SetBooleanField(env, socketAddressObj, ia6_scopeidsetID, JNI_TRUE);
} } /* fields common to AF_INET and AF_INET6 */
Thanks,
-- -Kurchi
- Previous message: hg: jdk8/tl/jdk: 7041800: URI.equals may incorrectly return true with escaped octets
- Next message: Code Review Request: 7084032: test/java/net/Inet6Address/B6558853.java fails on Windows XP/2003 if IPv6 enabled
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]