From a3982900a3c2d586e1b6acd6343ecde9fa37fc46 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 9 Aug 2017 16:58:51 +0200 Subject: Prevent NumberFormatExceptions from breaking everything; NPE in PacProxySelector --- .../com/btr/proxy/selector/pac/PacProxySelector.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'src/main/java/com/btr/proxy/selector/pac/PacProxySelector.java') diff --git a/src/main/java/com/btr/proxy/selector/pac/PacProxySelector.java b/src/main/java/com/btr/proxy/selector/pac/PacProxySelector.java index 765a376..a8441d6 100644 --- a/src/main/java/com/btr/proxy/selector/pac/PacProxySelector.java +++ b/src/main/java/com/btr/proxy/selector/pac/PacProxySelector.java @@ -8,8 +8,11 @@ import java.net.SocketAddress; import java.net.URI; import java.util.ArrayList; import java.util.List; + +import com.btr.proxy.selector.direct.NoProxySelector; import com.btr.proxy.util.Logger; import com.btr.proxy.util.Logger.LogLevel; +import com.btr.proxy.util.MiscUtil; import com.btr.proxy.util.ProxyUtil; @@ -123,6 +126,9 @@ public class PacProxySelector extends ProxySelector { List proxies = new ArrayList(); String parseResult = this.pacScriptParser.evaluate(uri.toString(), uri.getHost()); + if (parseResult == null) { + return ProxyUtil.noProxyList(); + } String[] proxyDefinitions = parseResult.split("[;]"); for (String proxyDef : proxyDefinitions) { if (proxyDef.trim().length() > 0) { @@ -162,19 +168,23 @@ public class PacProxySelector extends ProxySelector { // Check proxy type. Proxy.Type type = Proxy.Type.HTTP; + Integer port = ProxyUtil.DEFAULT_HTTP_PROXY_PORT; + if (proxyDef.toUpperCase().startsWith(PAC_SOCKS)) { type = Proxy.Type.SOCKS; + port = ProxyUtil.DEFAULT_SOCKS_PROXY_PORT; } - String host = proxyDef.substring(6); - Integer port = ProxyUtil.DEFAULT_HTTP_PROXY_PORT; + String host = proxyDef.substring(6).trim(); // because PROXY and SOCKS are both 5 chars... ;) // Split port from host int indexOfPort = host.indexOf(':'); if (indexOfPort != -1) { - port = Integer.parseInt(host.substring(indexOfPort+1).trim()); + port = MiscUtil.parseInt(host.substring(indexOfPort+1).trim()); host = host.substring(0, indexOfPort).trim(); } + if (port < 0 || port > 65535) + return Proxy.NO_PROXY; SocketAddress adr = InetSocketAddress.createUnresolved(host, port); return new Proxy(type, adr); -- cgit v1.2.3-55-g7522