From 7af69fcbd50267014f6fcd534b3450edff01eee4 Mon Sep 17 00:00:00 2001 From: gary Date: Tue, 29 Aug 2006 08:15:29 +0000 Subject: 2006-08-29 Gary Benson * java/net/SocketPermission.java (maybeBracketIPv6Address): New method. (): Pass the hostport argument through the above. * java/net/NetworkInterface.java (getInetAddresses): Revert the previous change. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@116557 138bc75d-0d04-0410-961f-82ee72b054a4 --- libjava/classpath/java/net/SocketPermission.java | 48 +++++++++++++++++++++++- 1 file changed, 46 insertions(+), 2 deletions(-) (limited to 'libjava/classpath/java/net/SocketPermission.java') diff --git a/libjava/classpath/java/net/SocketPermission.java b/libjava/classpath/java/net/SocketPermission.java index 723ccc7a5b5..a722fcad4e5 100644 --- a/libjava/classpath/java/net/SocketPermission.java +++ b/libjava/classpath/java/net/SocketPermission.java @@ -164,12 +164,56 @@ public final class SocketPermission extends Permission implements Serializable */ public SocketPermission(String hostport, String actions) { - super(hostport); + super(maybeBracketIPv6Address(hostport)); - setHostPort(hostport); + setHostPort(getName()); setActions(actions); } + /** + * IPv6 addresses in the hostport must either be enclosed by + * "[" and "]" or be specified in the full uncompressed form. + * In the latter case proprietary JVMs will quote the address + * with "[" and "]", so we do to. + */ + private static String maybeBracketIPv6Address(String hostport) + { + if (hostport.length() == 0 || hostport.charAt(0) == '[') + return hostport; + + int colons = 0, last_colon = 0; + for (int i = 0; i < hostport.length(); i++) + { + if (hostport.charAt(i) == ':') + { + if (i - last_colon == 1) + throw new IllegalArgumentException("Ambiguous hostport part"); + colons++; + last_colon = i; + } + } + + switch (colons) + { + case 0: + case 1: + // a hostname or IPv4 address + return hostport; + + case 7: + // an IPv6 address with no ports + return "[" + hostport + "]"; + + case 8: + // an IPv6 address with ports + return "[" + hostport.substring(0, last_colon) + "]" + + hostport.substring(last_colon); + + default: + throw new IllegalArgumentException("Ambiguous hostport part"); + } + } + /** * Parse the hostport argument to the constructor. */ -- cgit v1.2.3