Mercurial > hg > openjdk > jdk8u > jdk
changeset 11305:fe24fa1e6d99 jdk8u60-b32
8133196: HTTPS hostname invalid issue with InetAddress
Reviewed-by: chegar, xuelei
author | coffeys |
---|---|
date | Tue, 01 Sep 2015 09:37:34 -0700 |
parents | 99db84768196 |
children | b6bab84eac43 |
files | src/share/classes/java/net/Inet4Address.java src/share/classes/java/net/InetAddress.java src/share/native/java/net/InetAddress.c src/share/native/java/net/net_util.c src/share/native/java/net/net_util.h test/java/net/InetAddress/getOriginalHostName.java |
diffstat | 6 files changed, 79 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/java/net/Inet4Address.java Sat Jul 11 14:59:58 2015 +0300 +++ b/src/share/classes/java/net/Inet4Address.java Tue Sep 01 09:37:34 2015 -0700 @@ -117,11 +117,13 @@ holder().address = address; } } + holder().originalHostName = hostName; } Inet4Address(String hostName, int address) { holder().hostName = hostName; holder().family = IPv4; holder().address = address; + holder().originalHostName = hostName; } /**
--- a/src/share/classes/java/net/InetAddress.java Sat Jul 11 14:59:58 2015 +0300 +++ b/src/share/classes/java/net/InetAddress.java Tue Sep 01 09:37:34 2015 -0700 @@ -217,7 +217,7 @@ * * Note: May define a new public method in the future if necessary. */ - private String originalHostName; + String originalHostName; InetAddressHolder() {}
--- a/src/share/native/java/net/InetAddress.c Sat Jul 11 14:59:58 2015 +0300 +++ b/src/share/native/java/net/InetAddress.c Tue Sep 01 09:37:34 2015 -0700 @@ -38,6 +38,7 @@ jfieldID iac_addressID; jfieldID iac_familyID; jfieldID iac_hostNameID; +jfieldID iac_origHostNameID; jfieldID ia_preferIPv6AddressID; /* @@ -64,4 +65,6 @@ iac_familyID = (*env)->GetFieldID(env, iac_class, "family", "I"); CHECK_NULL(iac_familyID); iac_hostNameID = (*env)->GetFieldID(env, iac_class, "hostName", "Ljava/lang/String;"); + CHECK_NULL(iac_hostNameID); + iac_origHostNameID = (*env)->GetFieldID(env, iac_class, "originalHostName", "Ljava/lang/String;"); }
--- a/src/share/native/java/net/net_util.c Sat Jul 11 14:59:58 2015 +0300 +++ b/src/share/native/java/net/net_util.c Tue Sep 01 09:37:34 2015 -0700 @@ -199,6 +199,7 @@ initInetAddrs(env); holder = (*env)->GetObjectField(env, iaObj, ia_holderID); (*env)->SetObjectField(env, holder, iac_hostNameID, host); + (*env)->SetObjectField(env, holder, iac_origHostNameID, host); } int getInetAddress_addr(JNIEnv *env, jobject iaObj) {
--- a/src/share/native/java/net/net_util.h Sat Jul 11 14:59:58 2015 +0300 +++ b/src/share/native/java/net/net_util.h Tue Sep 01 09:37:34 2015 -0700 @@ -53,6 +53,7 @@ extern jfieldID iac_addressID; extern jfieldID iac_familyID; extern jfieldID iac_hostNameID; +extern jfieldID iac_origHostNameID; extern jfieldID ia_preferIPv6AddressID; /** (Inet6Address accessors)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/net/InetAddress/getOriginalHostName.java Tue Sep 01 09:37:34 2015 -0700 @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8133196 + * @summary test functionality of getOriginalHostName(InetAddress) + */ + +import java.io.*; +import java.net.InetAddress; + +import sun.misc.JavaNetAccess; +import sun.misc.SharedSecrets; + +public class getOriginalHostName { + + private static final JavaNetAccess jna = SharedSecrets.getJavaNetAccess(); + + public static void main(String[] args) throws Exception { + final String HOST = "dummyserver.java.net"; + InetAddress ia = null; + ia = InetAddress.getByName(HOST); + testInetAddress(ia, HOST); + ia = InetAddress.getByName("255.255.255.0"); + testInetAddress(ia, null); + ia = InetAddress.getByAddress(new byte[]{1,1,1,1}); + testInetAddress(ia, null); + ia = InetAddress.getLocalHost(); + testInetAddress(ia, ia.getHostName()); + ia = InetAddress.getLoopbackAddress(); + testInetAddress(ia, ia.getHostName()); + } + + + private static void testInetAddress(InetAddress ia, String expected) + throws Exception { + + System.out.println("Testing InetAddress: " + ia); + System.out.println("Expecting original hostname of : " + expected); + String origHostName = jna.getOriginalHostName(ia); + System.out.println("via JavaNetAccess: " + origHostName); + if (origHostName == null && expected != null) { + throw new RuntimeException("Unexpected null. Testing:" + expected); + } else if (expected != null && !origHostName.equals(expected)) { + throw new RuntimeException("Unexpected hostname :" + origHostName); + } else if (expected == null && origHostName != null) { + throw new RuntimeException("Unexpected origHostName: " + origHostName); + } + } +}