JDK-6894622 : IDN.toASCII and .toUnicode remove trailing dot
  • Type: Bug
  • Component: core-libs
  • Sub-Component: java.net
  • Affected Version: 6u15
  • Priority: P4
  • Status: Resolved
  • Resolution: Duplicate
  • OS: linux
  • CPU: x86
  • Submitted: 2009-10-23
  • Updated: 2014-03-25
  • Resolved: 2014-03-25
Related Reports
Duplicate :  
Description
FULL PRODUCT VERSION :
java version "1.6.0_15"
Java(TM) SE Runtime Environment (build 1.6.0_15-b03)
Java HotSpot(TM) 64-Bit Server VM (build 14.1-b02, mixed mode)


A DESCRIPTION OF THE PROBLEM :
The .toASCII and .toUnicode methods of java.net.IDN always return a hostname without a trailing dot, even when the input string did have a trailing dot. Because hostnames with and without a trailing dots are not semantically the same, I think a trailing dot should be preserved.

In both methods the following check is used to determine whether a dot should be added or not:

            if (p < input.length()) out.append('.');

By changing this into

            if (p <= input.length()) out.append('.');

or

            if (q < input.length()) out.append('.');

trailing dots will be preserved.

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
System.out.println(java.net.IDN.toASCII("sun.com"));
System.out.println(java.net.IDN.toASCII("sun.com."));
System.out.println(java.net.IDN.toUnicode("sun.com"));
System.out.println(java.net.IDN.toUnicode("sun.com."));

EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
sun.com
sun.com.
sun.com
sun.com.
ACTUAL -
sun.com
sun.com
sun.com
sun.com

REPRODUCIBILITY :
This bug can be reproduced always.

CUSTOMER SUBMITTED WORKAROUND :
It's possible to work around this bug by adding the missing dot in the calling code, but it's a kludge having to do this everywhere.

String toASCII(String hostname) {
    boolean dot = hostname.endsWith(".");
    hostname = IDN.toASCII(hostname);

    if (dot && !hostname.endsWith(".")) {
        hostname += "."
    }

    return hostname;
}