RFR JDK-8176379: java.util.Base64 mime encoder behaves incorrectly if initialized with a line length of size 1-3

Xueming Shen xueming.shen at oracle.com
Fri Jan 26 23:32:14 UTC 2018


Hi,

Please help review the change for JDK-8176379

issue: https://bugs.openjdk.java.net/browse/JDK-8176379
webrev: http://cr.openjdk.java.net/~sherman/8176379/webrev

It appears the spec is somewhat misleading and/or incorrect in this corner
case. And the implementation of the mime type encoder OutputStream does
not expect a "length==0" mime encoder. The difference behavior of the
non-stream-type encoder and stream-type encoder comes from

in non-stream-type case, we always have a " > 0" guard as

            if (linemax > 0 && slen > linemax / 4 * 3)
                 slen = linemax / 4 * 3

but in stream-type we don't.

         private void checkNewline() throws IOException {
             if (linepos == linemax) {
                 out.write(newline);
                 linepos = 0;
             }
         }

The proposed change here is to clarify the spec and the implementation
to use a non-mime type encoder (no line separator) when the rounded down
mime line length is smaller than 4.

We probably need a CSR for this spec clarification, if the proposed 
change is
approved.

Thanks,
Sherman


More information about the core-libs-dev mailing list