I need a code review for the simple fix to 6558853.
It's a simple case of a flag not set in the native code when creating a
Inet6Address.
Patch attached below.
Thanks
--- /home/jccollet/tmp/webrev/raw_files/old/src/share/native/java/net/net_util.c 2008-04-18 13:59:44.000000000 +0200
+++ /home/jccollet/tmp/webrev/raw_files/new/src/share/native/java/net/net_util.c 2008-04-18 13:59:44.000000000 +0200
@@ -112,6 +112,7 @@
(*env)->SetIntField(env, iaObj, ia_familyID, IPv4);
} else {
static jclass inet6Cls = 0;
+ jint scope;
if (inet6Cls == 0) {
jclass c = (*env)->FindClass(env, "java/net/Inet6Address");
CHECK_NULL_RETURN(c, NULL);
@@ -129,7 +130,10 @@
(*env)->SetObjectField(env, iaObj, ia6_ipaddressID, ipaddress);
(*env)->SetIntField(env, iaObj, ia_familyID, IPv6);
- (*env)->SetIntField(env, iaObj, ia6_scopeidID, getScopeID(him));
+ scope = getScopeID(him);
+ (*env)->SetIntField(env, iaObj, ia6_scopeidID, scope);
+ if (scope > 0)
+ (*env)->SetBooleanField(env, iaObj, ia6_scopeidsetID, JNI_TRUE);
}
*port = ntohs(him6->sin6_port);
} else
--- new/test/java/net/Inet6Address/B6558853.java 2008-04-18 13:59:44.000000000 +0200
+++ /dev/null 2008-02-29 10:40:07.000000000 +0100
@@ -1,86 +0,0 @@
-/*
- * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
- */
-
-/**
- * @test
- * @bug 6558853
- * @summary getHostAddress() on connections using IPv6 link-local addrs should have zone id
- */
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.*;
-import java.util.Enumeration;
-
-public class B6558853 implements Runnable {
- private InetAddress addr = null;
- private int port = 0;
-
- public static void main(String[] args) throws Exception {
- ServerSocket ss = new ServerSocket(0);
- int port = ss.getLocalPort();
- Enumeration<NetworkInterface> l = NetworkInterface.getNetworkInterfaces();
- InetAddress dest = null;
- while (l.hasMoreElements() && dest == null) {
- NetworkInterface nif = l.nextElement();
- for (InterfaceAddress a : nif.getInterfaceAddresses()) {
- if (a.getAddress() instanceof Inet6Address) {
- Inet6Address a6 = (Inet6Address) a.getAddress();
- if (a6.isLinkLocalAddress()) {
- dest = a6;
- }
- break;
- }
- }
- }
- if (dest != null) {
- B6558853 test = new B6558853(dest, port);
- Thread thread = new Thread(test);
- thread.start();
- Socket s = ss.accept();
- InetAddress a = s.getInetAddress();
- OutputStream out = s.getOutputStream();
- out.write(1);
- out.close();
- if (!(a instanceof Inet6Address) || a.getHostAddress().indexOf("%") == -1) {
- // No Scope found in the address String
- throw new RuntimeException("Wrong address: " + a.getHostAddress());
- }
- }
- }
-
- public B6558853(InetAddress a, int port) {
- addr = a;
- this.port = port;
- }
-
- public void run() {
- try {
- Socket s = new Socket(addr, port);
- InputStream in = s.getInputStream();
- int i = in.read();
- in.close();
- } catch (IOException iOException) {
- }
- }
-}