OSDN Git Service

Fix ANR with bypass proxy regex
authorIrfan Sheriff <isheriff@google.com>
Wed, 23 Mar 2011 00:19:05 +0000 (17:19 -0700)
committerIrfan Sheriff <isheriff@google.com>
Wed, 23 Mar 2011 00:57:44 +0000 (17:57 -0700)
Bug: 4148297
Change-Id: I5519ed297acabb65e1992c65e4b4110380983bb1

src/com/android/settings/ProxySelector.java

index bdb32e3..909496e 100644 (file)
@@ -62,13 +62,12 @@ public class ProxySelector extends Fragment implements DialogCreatable {
     private static final String HOSTNAME_REGEXP =
             "^$|^[a-zA-Z0-9]+(\\-[a-zA-Z0-9]+)*(\\.[a-zA-Z0-9]+(\\-[a-zA-Z0-9]+)*)*$";
     private static final Pattern HOSTNAME_PATTERN;
-    private static final String EXCLLIST_REGEXP =
-            "$|^(.?[a-zA-Z0-9]+(\\-[a-zA-Z0-9]+)*(\\.[a-zA-Z0-9]+(\\-[a-zA-Z0-9]+)*)*)+" +
-            "(,(.?[a-zA-Z0-9]+(\\-[a-zA-Z0-9]+)*(\\.[a-zA-Z0-9]+(\\-[a-zA-Z0-9]+)*)*))*$";
-    private static final Pattern EXCLLIST_PATTERN;
+    private static final String EXCLUSION_REGEXP =
+            "$|^(.?[a-zA-Z0-9]+(\\-[a-zA-Z0-9]+)*(\\.[a-zA-Z0-9]+(\\-[a-zA-Z0-9]+)*)*)+$";
+    private static final Pattern EXCLUSION_PATTERN;
     static {
         HOSTNAME_PATTERN = Pattern.compile(HOSTNAME_REGEXP);
-        EXCLLIST_PATTERN = Pattern.compile(EXCLLIST_REGEXP);
+        EXCLUSION_PATTERN = Pattern.compile(EXCLUSION_REGEXP);
     }
 
     private static final int ERROR_DIALOG_ID = 0;
@@ -201,11 +200,14 @@ public class ProxySelector extends Fragment implements DialogCreatable {
      */
     public static int validate(String hostname, String port, String exclList) {
         Matcher match = HOSTNAME_PATTERN.matcher(hostname);
-        Matcher listMatch = EXCLLIST_PATTERN.matcher(exclList);
+        String exclListArray[] = exclList.split(",");
 
         if (!match.matches()) return R.string.proxy_error_invalid_host;
 
-        if (!listMatch.matches()) return R.string.proxy_error_invalid_exclusion_list;
+        for (String excl : exclListArray) {
+            Matcher m = EXCLUSION_PATTERN.matcher(excl);
+            if (!m.matches()) return R.string.proxy_error_invalid_exclusion_list;
+        }
 
         if (hostname.length() > 0 && port.length() == 0) {
             return R.string.proxy_error_empty_port;