diff options
| -rw-r--r-- | core/java/android/net/Uri.java | 10 | ||||
| -rw-r--r-- | tests/AndroidTests/src/com/android/unit_tests/UriTest.java | 5 |
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()); |
