Mercurial > hg > openjdk > jdk8 > jdk
changeset 8763:771c77b49bb6
8019834: InetAddress.getByName hangs for bad IPv6 literals
Reviewed-by: alanb
author | chegar |
---|---|
date | Fri, 08 Nov 2013 15:15:48 +0000 |
parents | 3112729d6b74 |
children | 1c9ba18198d5 |
files | src/share/classes/java/net/InetAddress.java test/java/net/ipv6tests/BadIPv6Addresses.java |
diffstat | 2 files changed, 9 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/java/net/InetAddress.java Fri Nov 08 15:12:30 2013 +0000 +++ b/src/share/classes/java/net/InetAddress.java Fri Nov 08 15:15:48 2013 +0000 @@ -1135,7 +1135,7 @@ // see if it is IPv4 address addr = IPAddressUtil.textToNumericFormatV4(host); if (addr == null) { - // see if it is IPv6 address + // This is supposed to be an IPv6 literal // Check if a numeric or string zone id is present int pos; if ((pos=host.indexOf ("%")) != -1) { @@ -1144,7 +1144,9 @@ ifname = host.substring (pos+1); } } - addr = IPAddressUtil.textToNumericFormatV6(host); + if ((addr = IPAddressUtil.textToNumericFormatV6(host)) == null) { + throw new UnknownHostException(host + ": invalid IPv6 address"); + } } else if (ipv6Expected) { // Means an IPv4 litteral between brackets! throw new UnknownHostException("["+host+"]"); @@ -1162,10 +1164,10 @@ } return ret; } - } else if (ipv6Expected) { - // We were expecting an IPv6 Litteral, but got something else - throw new UnknownHostException("["+host+"]"); - } + } else if (ipv6Expected) { + // We were expecting an IPv6 Litteral, but got something else + throw new UnknownHostException("["+host+"]"); + } return getAllByName0(host, reqAddr, true); }
--- a/test/java/net/ipv6tests/BadIPv6Addresses.java Fri Nov 08 15:12:30 2013 +0000 +++ b/test/java/net/ipv6tests/BadIPv6Addresses.java Fri Nov 08 15:15:48 2013 +0000 @@ -23,7 +23,7 @@ /* * @test - * @bug 4742177 + * @bug 4742177 8019834 * @summary Re-test IPv6 (and specifically MulticastSocket) with latest Linux & USAGI code */ import java.net.*;