summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/java/android/net/Uri.java10
-rw-r--r--tests/AndroidTests/src/com/android/unit_tests/UriTest.java5
2 files changed, 11 insertions, 4 deletions
diff --git a/core/java/android/net/Uri.java b/core/java/android/net/Uri.java
index 298be3b..9a1b65d 100644
--- a/core/java/android/net/Uri.java
+++ b/core/java/android/net/Uri.java
@@ -1028,7 +1028,7 @@ public abstract class Uri implements Parcelable, Comparable<Uri> {
}
private String parseHost() {
- String authority = getAuthority();
+ String authority = getEncodedAuthority();
if (authority == null) {
return null;
}
@@ -1037,9 +1037,11 @@ public abstract class Uri implements Parcelable, Comparable<Uri> {
int userInfoSeparator = authority.indexOf('@');
int portSeparator = authority.indexOf(':', userInfoSeparator);
- return portSeparator == NOT_FOUND
+ String encodedHost = portSeparator == NOT_FOUND
? authority.substring(userInfoSeparator + 1)
: authority.substring(userInfoSeparator + 1, portSeparator);
+
+ return decode(encodedHost);
}
private volatile int port = NOT_CALCULATED;
@@ -1051,7 +1053,7 @@ public abstract class Uri implements Parcelable, Comparable<Uri> {
}
private int parsePort() {
- String authority = getAuthority();
+ String authority = getEncodedAuthority();
if (authority == null) {
return -1;
}
@@ -1065,7 +1067,7 @@ public abstract class Uri implements Parcelable, Comparable<Uri> {
return -1;
}
- String portString = authority.substring(portSeparator + 1);
+ String portString = decode(authority.substring(portSeparator + 1));
try {
return Integer.parseInt(portString);
} catch (NumberFormatException e) {
diff --git a/tests/AndroidTests/src/com/android/unit_tests/UriTest.java b/tests/AndroidTests/src/com/android/unit_tests/UriTest.java
index 0abbc9a..d17e2c3 100644
--- a/tests/AndroidTests/src/com/android/unit_tests/UriTest.java
+++ b/tests/AndroidTests/src/com/android/unit_tests/UriTest.java
@@ -171,6 +171,11 @@ public class UriTest extends TestCase {
assertEquals("bob lee", uri.getUserInfo());
assertEquals("bob%20lee", uri.getEncodedUserInfo());
+ uri = Uri.parse("http://bob%40lee%3ajr@local%68ost:4%32");
+ assertEquals("bob@lee:jr", uri.getUserInfo());
+ assertEquals("localhost", uri.getHost());
+ assertEquals(42, uri.getPort());
+
uri = Uri.parse("http://localhost");
assertEquals("localhost", uri.getHost());
assertEquals(-1, uri.getPort());