On 22 Mar 2014, at 03:22, Mandy Chung <mandy.ch...@oracle.com> wrote:
> Good catch Sherman. > > Vinnie - what's your recommendation for this LDAP change having both > encode/decode uses the platform default charset (rather than retaining the > old interop issue)? It's an incompatible change and I'll file a CCC to track > this. Yes. I think that’s the right approach as the compatibility risk is low. > > Mandy > > On 3/21/2014 2:23 AM, Vincent Ryan wrote: >> You’re right but we’ve never received a report of any charset interop. >> issues. >> Probably such a scenario has never been encountered by customers. >> >> >> On 21 Mar 2014, at 05:54, Xueming Shen <xueming.s...@oracle.com> wrote: >> >>> Obj.java:#482 >>> It appears sun.misc.BASE64Decoder.decodeBuffer(String) uses String's >>> deprecated >>> String.getBytes(int srcBegin, int srcEnd, byte[] dst, int dstBegin). The >>> proposed change >>> now uses the jvm's default charset. It might trigger incompatible >>> behavior if the default >>> charset is not an ASCII compatible charset. But if the "Java object in >>> LDAP was encoded >>> with the platform default charset" (as the new comment suggested), the >>> old implementation >>> actually did not work on platform that the default encoding is not ASCII >>> compatible, such >>> as the IBM ebcdic. >>> >>> -Sherman >>> >>> On 3/20/14 3:48 PM, Mandy Chung wrote: >>>> On 3/19/14 12:28 PM, Xueming Shen wrote: >>>>> On 03/19/2014 11:37 AM, Mandy Chung wrote: >>>>>> https://bugs.openjdk.java.net/browse/JDK-8035807 >>>>>> >>>>>> Webrev at: >>>>>> http://cr.openjdk.java.net/~mchung/jdk9/webrevs/8035807/webrev.00/ >>>>>> >>>>>> This patch converts the last 2 references to >>>>>> sun.misc.BASE64Encoder/Decoder from the jdk repo with java.util.Base64. >>>>>> We should also update the tests and I have filed JDK-8037873 for that. >>>>>> >>>>>> Thanks >>>>>> Mandy >>>>> The sun.misc.BASE64En/Decoder is MIME type, so it outputs the \r\n per 76 >>>>> characters during encoding, and ignores/skip \r or \n when decoding. The >>>>> new >>>>> Base64.getEncoder/Decoder() returns the "basic" Base64 coder, which it >>>>> never >>>>> inserts line separator when output, and throws exception for any >>>>> non-base64- >>>>> alphabet character, including \r and \n. >>>>> >>>>> The only disadvantage/incompatibility (j.u.Base64.getMimeDecoer() vs >>>>> sun.misc.BASE64Decoder) of switching to j.u.Base64 MIME type en/decoder >>>>> is that the Base64 Mime decoder ignores/skips any non-base64-alphabet >>>>> (including \r and \n), while sun.misc.BASE64Decoder appears to simply >>>>> use the init value "-1" for any non-base64-alphabet character for >>>>> decoding. >>>>> >>>>> I'm not familiar with the use scenario of ldap's Obj class, so I'm not >>>>> sure if >>>>> it matters (if it ever outputs/inputs > 76 character data, or even it >>>>> does,if >>>>> the difference matters). >>>>> >>>>> Btw, except getMimeEncoder(int ...) all other Base64.getXXXEn/Decoder() >>>>> returns singleton, so the de/encoder cache might not be necessary. >>>> Thanks Sherman. Vinnie confirms that it should retain the current >>>> behavior as there could be long-lived Java object in LDAP encoded with JDK >>>> 8 for example and then retrieved with JDK 9. >>>> >>>> Here is the updated webrev: >>>> http://cr.openjdk.java.net/~mchung/jdk9/webrevs/8035807/webrev.01/ >>>> >>>> Thanks >>>> Mandy >