aboutsummaryrefslogtreecommitdiff
path: root/src/share/classes/java/net/HostPortrange.java
diff options
context:
space:
mode:
authormichaelm <none@none>2013-11-04 17:47:59 +0000
committermichaelm <none@none>2013-11-04 17:47:59 +0000
commit16c4017f24656c855e5104eb19de1550b8b0f41e (patch)
tree3ccc55c68ff6633137106cc11457fd32e9c3ee19 /src/share/classes/java/net/HostPortrange.java
parent0af2fa5ab8406bb8fdec483e13f79eae452a90a2 (diff)
downloadjdk8u_jdk-16c4017f24656c855e5104eb19de1550b8b0f41e.tar.gz
8027687: The constructors of URLPermission class do not behave as described in javad
Reviewed-by: chegar, mduigou
Diffstat (limited to 'src/share/classes/java/net/HostPortrange.java')
-rw-r--r--src/share/classes/java/net/HostPortrange.java36
1 files changed, 34 insertions, 2 deletions
diff --git a/src/share/classes/java/net/HostPortrange.java b/src/share/classes/java/net/HostPortrange.java
index fc5e3d98a2..3c924d8bfc 100644
--- a/src/share/classes/java/net/HostPortrange.java
+++ b/src/share/classes/java/net/HostPortrange.java
@@ -114,7 +114,7 @@ class HostPortrange {
if (hoststr.equals("*")) {
hoststr = "";
} else if (hoststr.startsWith("*.")) {
- hoststr = hoststr.substring(1).toLowerCase(); // leave the '.' ?
+ hoststr = toLowerCase(hoststr.substring(1));
} else {
throw new IllegalArgumentException("invalid host wildcard specification");
}
@@ -147,7 +147,7 @@ class HostPortrange {
hoststr = sb.toString();
} else {
// regular domain name
- hoststr = hoststr.toLowerCase();
+ hoststr = toLowerCase(hoststr);
}
}
}
@@ -161,6 +161,38 @@ class HostPortrange {
}
}
+ static final int CASE_DIFF = 'A' - 'a';
+
+ /**
+ * Convert to lower case, and check that all chars are ascii
+ * alphanumeric, '-' or '.' only.
+ */
+ static String toLowerCase(String s) {
+ int len = s.length();
+ StringBuilder sb = null;
+
+ for (int i=0; i<len; i++) {
+ char c = s.charAt(i);
+ if ((c >= 'a' && c <= 'z') || (c == '.')) {
+ if (sb != null)
+ sb.append(c);
+ } else if ((c >= '0' && c <= '9') || (c == '-')) {
+ if (sb != null)
+ sb.append(c);
+ } else if (c >= 'A' && c <= 'Z') {
+ if (sb == null) {
+ sb = new StringBuilder(len);
+ sb.append(s, 0, i);
+ }
+ sb.append((char)(c - CASE_DIFF));
+ } else {
+ throw new IllegalArgumentException("Invalid characters in hostname");
+ }
+ }
+ return sb == null ? s : sb.toString();
+ }
+
+
public boolean literal() {
return literal;
}