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) {
-        }
-    }
-}

  • Code review needed for 6558... Jean-Christophe Collet

Reply via email to