RFR JDK-8176379: java.util.Base64 mime encoder behaves incorrectly if initialized with a line length of size 1-3
Paul Sandoz
paul.sandoz at oracle.com
Fri Jan 26 23:53:26 UTC 2018
Base64
—
138 lineLength = lineLength >> 2 << 2;
I know the code was shuffled up but i find the following clearer in terms of bit manipulation:
// Round down to nearest mulitple of 4
lineLength &= ~0b11
TestBase64
—
Is there a test passing in a negative value for len?
Thanks,
Paul.
> On Jan 26, 2018, at 3:32 PM, Xueming Shen <xueming.shen at oracle.com> wrote:
>
> 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