mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 07:14:30 +02:00
8199110: Address Internet Addresses
Reviewed-by: chegar, rriggs, igerasim, skoivu, rhalade
This commit is contained in:
parent
02876bfceb
commit
627e310ba5
3 changed files with 31 additions and 8 deletions
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1995, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -35,6 +35,7 @@ import java.io.FileNotFoundException;
|
||||||
import java.io.ObjectStreamException;
|
import java.io.ObjectStreamException;
|
||||||
import java.io.ObjectStreamField;
|
import java.io.ObjectStreamField;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.io.InvalidObjectException;
|
||||||
import java.io.ObjectInputStream;
|
import java.io.ObjectInputStream;
|
||||||
import java.io.ObjectInputStream.GetField;
|
import java.io.ObjectInputStream.GetField;
|
||||||
import java.io.ObjectOutputStream;
|
import java.io.ObjectOutputStream;
|
||||||
|
@ -1727,8 +1728,11 @@ class InetAddress implements java.io.Serializable {
|
||||||
}
|
}
|
||||||
GetField gf = s.readFields();
|
GetField gf = s.readFields();
|
||||||
String host = (String)gf.get("hostName", null);
|
String host = (String)gf.get("hostName", null);
|
||||||
int address= gf.get("address", 0);
|
int address = gf.get("address", 0);
|
||||||
int family= gf.get("family", 0);
|
int family = gf.get("family", 0);
|
||||||
|
if (family != IPv4 && family != IPv6) {
|
||||||
|
throw new InvalidObjectException("invalid address family type: " + family);
|
||||||
|
}
|
||||||
InetAddressHolder h = new InetAddressHolder(host, address, family);
|
InetAddressHolder h = new InetAddressHolder(host, address, family);
|
||||||
UNSAFE.putObject(this, FIELDS_OFFSET, h);
|
UNSAFE.putObject(this, FIELDS_OFFSET, h);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -321,8 +321,20 @@ public final class NetworkInterface {
|
||||||
if (addr == null) {
|
if (addr == null) {
|
||||||
throw new NullPointerException();
|
throw new NullPointerException();
|
||||||
}
|
}
|
||||||
if (!(addr instanceof Inet4Address || addr instanceof Inet6Address)) {
|
if (addr instanceof Inet4Address) {
|
||||||
throw new IllegalArgumentException ("invalid address type");
|
Inet4Address inet4Address = (Inet4Address) addr;
|
||||||
|
if (inet4Address.holder.family != InetAddress.IPv4) {
|
||||||
|
throw new IllegalArgumentException("invalid family type: "
|
||||||
|
+ inet4Address.holder.family);
|
||||||
|
}
|
||||||
|
} else if (addr instanceof Inet6Address) {
|
||||||
|
Inet6Address inet6Address = (Inet6Address) addr;
|
||||||
|
if (inet6Address.holder.family != InetAddress.IPv6) {
|
||||||
|
throw new IllegalArgumentException("invalid family type: "
|
||||||
|
+ inet6Address.holder.family);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new IllegalArgumentException("invalid address type: " + addr);
|
||||||
}
|
}
|
||||||
return getByInetAddress0(addr);
|
return getByInetAddress0(addr);
|
||||||
}
|
}
|
||||||
|
|
|
@ -331,9 +331,16 @@ JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByInetAddress0
|
||||||
netif *ifs, *curr;
|
netif *ifs, *curr;
|
||||||
jobject obj = NULL;
|
jobject obj = NULL;
|
||||||
jboolean match = JNI_FALSE;
|
jboolean match = JNI_FALSE;
|
||||||
int family = (getInetAddress_family(env, iaObj) == java_net_InetAddress_IPv4) ?
|
int family = getInetAddress_family(env, iaObj);
|
||||||
AF_INET : AF_INET6;
|
|
||||||
JNU_CHECK_EXCEPTION_RETURN(env, NULL);
|
JNU_CHECK_EXCEPTION_RETURN(env, NULL);
|
||||||
|
|
||||||
|
if (family == java_net_InetAddress_IPv4) {
|
||||||
|
family = AF_INET;
|
||||||
|
} else if (family == java_net_InetAddress_IPv6) {
|
||||||
|
family = AF_INET6;
|
||||||
|
} else {
|
||||||
|
return NULL; // Invalid family
|
||||||
|
}
|
||||||
ifs = enumInterfaces(env);
|
ifs = enumInterfaces(env);
|
||||||
if (ifs == NULL) {
|
if (ifs == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue