From ad78bf1f22e6b2fa973efae91ad4f9eb23976cdd Mon Sep 17 00:00:00 2001 From: Remi NGUYEN VAN Date: Fri, 15 Jan 2021 23:42:00 +0900 Subject: [PATCH] Remove hidden API usage of Proxy.validate Proxy is planned to move to the connectivity module, so framework classes like DevicePolicyManager cannot depend on its private symbols. Replace usage of ProxyInfo.validate by the equivalent isValid method on ProxyInfo. Bug: 174436414 Test: atest DevicePolicyManagerTest#testGetProxyParameters Change-Id: I6da49a34c9893d07ef7cbee6a7386c9258839467 --- .../app/admin/DevicePolicyManager.java | 29 ++++++++----------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index c7fa7fa314036..69d387994568c 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -85,6 +85,7 @@ import android.security.keystore.StrongBoxUnavailableException; import android.service.restrictions.RestrictionsReceiver; import android.telephony.TelephonyManager; import android.telephony.data.ApnSetting; +import android.text.TextUtils; import android.util.ArraySet; import android.util.Log; import android.util.Pair; @@ -4548,29 +4549,23 @@ public class DevicePolicyManager { InetSocketAddress sa = (InetSocketAddress) proxySpec.address(); String hostName = sa.getHostName(); int port = sa.getPort(); - StringBuilder hostBuilder = new StringBuilder(); - final String hostSpec = hostBuilder.append(hostName) - .append(":").append(Integer.toString(port)).toString(); - final String exclSpec; + final List trimmedExclList; if (exclusionList == null) { - exclSpec = ""; + trimmedExclList = Collections.emptyList(); } else { - StringBuilder listBuilder = new StringBuilder(); - boolean firstDomain = true; + trimmedExclList = new ArrayList<>(exclusionList.size()); for (String exclDomain : exclusionList) { - if (!firstDomain) { - listBuilder = listBuilder.append(","); - } else { - firstDomain = false; - } - listBuilder = listBuilder.append(exclDomain.trim()); + trimmedExclList.add(exclDomain.trim()); } - exclSpec = listBuilder.toString(); } - if (android.net.Proxy.validate(hostName, Integer.toString(port), exclSpec) - != android.net.Proxy.PROXY_VALID) throw new IllegalArgumentException(); + final ProxyInfo info = ProxyInfo.buildDirectProxy(hostName, port, trimmedExclList); + // The hostSpec is built assuming that there is a specified port and hostname, + // but ProxyInfo.isValid() accepts 0 / empty as unspecified: also reject them. + if (port == 0 || TextUtils.isEmpty(hostName) || !info.isValid()) { + throw new IllegalArgumentException(); + } - return new Pair<>(hostSpec, exclSpec); + return new Pair<>(hostName + ":" + port, TextUtils.join(",", trimmedExclList)); } /**