diff options
-rw-r--r-- | harmony-tests/src/test/java/org/apache/harmony/tests/java/net/IDNTest.java | 8 | ||||
-rw-r--r-- | ojluni/src/main/java/java/net/IDN.java | 5 |
2 files changed, 13 insertions, 0 deletions
diff --git a/harmony-tests/src/test/java/org/apache/harmony/tests/java/net/IDNTest.java b/harmony-tests/src/test/java/org/apache/harmony/tests/java/net/IDNTest.java index dfd4d664d1..d6cf4a9e8b 100644 --- a/harmony-tests/src/test/java/org/apache/harmony/tests/java/net/IDNTest.java +++ b/harmony-tests/src/test/java/org/apache/harmony/tests/java/net/IDNTest.java @@ -153,4 +153,12 @@ public class IDNTest extends TestCase { "www\uFF0Exn--gwtq9nb2a\uFF61jp", IDN.USE_STD3_ASCII_RULES)); } + + // b/113787610: "." is a valid IDN, as are absolute domain names with a trailing dot. + public void test_TrailingDots() { + assertEquals("google.com.", IDN.toASCII("google.com.")); + assertEquals(".", IDN.toASCII(".")); + assertEquals("google.com.", IDN.toUnicode("google.com.")); + assertEquals(".", IDN.toUnicode(".")); + } } diff --git a/ojluni/src/main/java/java/net/IDN.java b/ojluni/src/main/java/java/net/IDN.java index 4639c8fc80..a18c3a8dac 100644 --- a/ojluni/src/main/java/java/net/IDN.java +++ b/ojluni/src/main/java/java/net/IDN.java @@ -107,6 +107,11 @@ public final class IDN { try { return IDNA.convertIDNToASCII(input, flag).toString(); } catch (android.icu.text.StringPrepParseException e) { + // b/113787610: "." is a valid IDN but is rejected by ICU. + // Usage is relatively uncommon, so only check for it if ICU throws. + if (".".equals(input)) { + return input; + } throw new IllegalArgumentException("Invalid input to toASCII: " + input, e); } // END Android-changed: Use ICU4J implementation |