summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--harmony-tests/src/test/java/org/apache/harmony/tests/java/net/IDNTest.java8
-rw-r--r--ojluni/src/main/java/java/net/IDN.java5
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