6801497: Proxy is assumed to be immutable but is non-final
Summary: Cloned the proxy instance when necessary
Reviewed-by: chegar
--- a/jdk/src/share/classes/java/net/Socket.java Tue May 05 12:07:37 2009 +0400
+++ b/jdk/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/jdk/src/share/classes/java/net/URL.java Tue May 05 12:07:37 2009 +0400
+++ b/jdk/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);
}
/**