Mercurial > hg > release > icedtea7-forest-2.0 > jdk
changeset 1556:ead34d1e3c9f
6801497: Proxy is assumed to be immutable but is non-final
Summary: Cloned the proxy instance when necessary
Reviewed-by: chegar
author | jccollet |
---|---|
date | Tue, 05 May 2009 11:02:51 +0200 |
parents | 5b166df43d63 |
children | 38a0e21f345a |
files | src/share/classes/java/net/Socket.java src/share/classes/java/net/URL.java |
diffstat | 2 files changed, 14 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/java/net/Socket.java Tue May 05 12:07:37 2009 +0400 +++ b/src/share/classes/java/net/Socket.java Tue May 05 11:02:51 2009 +0200 @@ -114,9 +114,14 @@ * @since 1.5 */ public Socket(Proxy proxy) { - if (proxy != null && proxy.type() == Proxy.Type.SOCKS) { + // Create a copy of Proxy as a security measure + if (proxy == null) { + throw new IllegalArgumentException("Invalid Proxy"); + } + Proxy p = proxy == Proxy.NO_PROXY ? Proxy.NO_PROXY : new Proxy(proxy.type(), proxy.address()); + if (p.type() == Proxy.Type.SOCKS) { SecurityManager security = System.getSecurityManager(); - InetSocketAddress epoint = (InetSocketAddress) proxy.address(); + InetSocketAddress epoint = (InetSocketAddress) p.address(); if (security != null) { if (epoint.isUnresolved()) security.checkConnect(epoint.getHostName(), @@ -125,10 +130,10 @@ security.checkConnect(epoint.getAddress().getHostAddress(), epoint.getPort()); } - impl = new SocksSocketImpl(proxy); + impl = new SocksSocketImpl(p); impl.setSocket(this); } else { - if (proxy == Proxy.NO_PROXY) { + if (p == Proxy.NO_PROXY) { if (factory == null) { impl = new PlainSocketImpl(); impl.setSocket(this);
--- a/src/share/classes/java/net/URL.java Tue May 05 12:07:37 2009 +0400 +++ b/src/share/classes/java/net/URL.java Tue May 05 11:02:51 2009 +0200 @@ -1004,16 +1004,18 @@ throw new IllegalArgumentException("proxy can not be null"); } + // Create a copy of Proxy as a security measure + Proxy p = proxy == Proxy.NO_PROXY ? Proxy.NO_PROXY : new Proxy(proxy.type(), proxy.address()); SecurityManager sm = System.getSecurityManager(); - if (proxy.type() != Proxy.Type.DIRECT && sm != null) { - InetSocketAddress epoint = (InetSocketAddress) proxy.address(); + if (p.type() != Proxy.Type.DIRECT && sm != null) { + InetSocketAddress epoint = (InetSocketAddress) p.address(); if (epoint.isUnresolved()) sm.checkConnect(epoint.getHostName(), epoint.getPort()); else sm.checkConnect(epoint.getAddress().getHostAddress(), epoint.getPort()); } - return handler.openConnection(this, proxy); + return handler.openConnection(this, p); } /**