Mercurial > hg > openjdk > jdk8u > jdk
changeset 10655:3edfbb32b3c0 jdk8u45-b10
7178362: Socket impls should ignore unsupported proxy types rather than throwing
Reviewed-by: chegar
author | coffeys |
---|---|
date | Wed, 25 Feb 2015 11:44:53 +0000 |
parents | 086130c691e5 |
children | d5c563f5a3d2 |
files | src/share/classes/java/net/SocksSocketImpl.java test/java/net/Socks/BadProxySelector.java |
diffstat | 2 files changed, 91 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/java/net/SocksSocketImpl.java Thu Apr 09 14:07:49 2015 -0700 +++ b/src/share/classes/java/net/SocksSocketImpl.java Wed Feb 25 11:44:53 2015 +0000 @@ -388,14 +388,13 @@ } while (iProxy.hasNext()) { p = iProxy.next(); - if (p == null || p == Proxy.NO_PROXY) { + if (p == null || p.type() != Proxy.Type.SOCKS) { super.connect(epoint, remainingMillis(deadlineMillis)); return; } - if (p.type() != Proxy.Type.SOCKS) - throw new SocketException("Unknown proxy type : " + p.type()); + if (!(p.address() instanceof InetSocketAddress)) - throw new SocketException("Unknow address type for proxy: " + p); + throw new SocketException("Unknown address type for proxy: " + p); // Use getHostString() to avoid reverse lookups server = ((InetSocketAddress) p.address()).getHostString(); serverPort = ((InetSocketAddress) p.address()).getPort(); @@ -703,13 +702,12 @@ } while (iProxy.hasNext()) { p = iProxy.next(); - if (p == null || p == Proxy.NO_PROXY) { + if (p == null || p.type() != Proxy.Type.SOCKS) { return; } - if (p.type() != Proxy.Type.SOCKS) - throw new SocketException("Unknown proxy type : " + p.type()); + if (!(p.address() instanceof InetSocketAddress)) - throw new SocketException("Unknow address type for proxy: " + p); + throw new SocketException("Unknown address type for proxy: " + p); // Use getHostString() to avoid reverse lookups server = ((InetSocketAddress) p.address()).getHostString(); serverPort = ((InetSocketAddress) p.address()).getPort();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/net/Socks/BadProxySelector.java Wed Feb 25 11:44:53 2015 +0000 @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 7178362 + * @run main/othervm BadProxySelector + */ + +import java.net.InetSocketAddress; +import java.net.Proxy; +import java.net.ProxySelector; +import java.net.Socket; +import java.net.SocketAddress; +import java.net.ServerSocket; +import java.net.URI; +import java.util.ArrayList; +import java.util.List; +import java.io.*; + +public class BadProxySelector { + public static void main(String[] args) throws Exception { + ProxySelector.setDefault(new HTTPProxySelector()); + try (ServerSocket ss = new ServerSocket(0); + Socket s1 = new Socket(ss.getInetAddress(), ss.getLocalPort()); + Socket s2 = ss.accept()) { + } + + ProxySelector.setDefault(new NullHTTPProxySelector()); + try (ServerSocket ss = new ServerSocket(0); + Socket s1 = new Socket(ss.getInetAddress(), ss.getLocalPort()); + Socket s2 = ss.accept()) { + } + } + + // always returns bogus HTTP proxies + private static class HTTPProxySelector extends ProxySelector { + @Override + public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {} + + @Override + public List<Proxy> select(URI uri) { + List<Proxy> proxies = new ArrayList<>(); + proxies.add(new Proxy(Proxy.Type.HTTP, + new InetSocketAddress("localhost", 0))); + proxies.add(new Proxy(Proxy.Type.HTTP, + new InetSocketAddress("localhost", 0))); + return proxies; + } + } + + private static class NullHTTPProxySelector extends ProxySelector { + @Override + public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {} + + @Override + public List<Proxy> select(URI uri) { + List<Proxy> proxies = new ArrayList<>(); + proxies.add(null); + proxies.add(new Proxy(Proxy.Type.HTTP, + new InetSocketAddress("localhost", 0))); + return proxies; + } + } +}