Bug in java.net.http.WebSocket (?)

Fischer, Simon simon.fischer at ipp.mpg.de
Wed Mar 5 17:53:02 UTC 2025


Hi all,

no idea if I am in the right place here, but I have no account to create a tracker issue and also could not find out how to get one...

I was just using the java.net.html.WebSocket (jdk17 specifically, but the issue should still be there at least in 21 from a quick look into the code) for testing purposes and stumbled upon what I think is a bug:

When I supply a _little endian_ ByteBuffer to WebSocket.sendBinary, the payload will be scrambled on the way to the server.

The actual issue is in jdk.internal.net.http.websocket.Frame. The loop()-portion of the transferMasking algorithm uses ByteBuffer.putLong(ByteBuffer.getLong) ("dst.putLong(j, src.getLong(i) ^ maskLong);") to try to optimize the masking and data transfer. Problem is that src is a ByteBuffer provided by the user, with the endianness set by the user, while dst is an internally allocated ByteBuffer with the default byte order. This obviously can lead  to 8-byte-blocks of the original message being re-ordered on the way to the client.

The solution IMO would be to ensure that both buffers are set to the same endianness. And it should probably be _native endian_, as the use of a specific endianness would likely render the long-vectorization/optimization useless on a machine which does not support that endianness natively (getLong would reverse the byte order when loading into native CPU register and putLong would reorder again). In that case, actually any case, care must also be taken with regard to the right encoding of the "maskLong" 64bit integer.

Alternatively, one could just adopt the documentation to require the ByteBuffer provided to WebSocket.sendBinary() to be default(/big)-endian encoded. Semi-solution IMO.

Would be interested in feedback and hope this finds somebody who can make use of it :)


Best regards
Simon Fischer

--
Simon Fischer

Developer
E5-CoDaC

Max Planck Institut for Plasmaphysics
Wendelsteinstrasse 1
17491 Greifswald, Germany

Phone: +49(0)3834 88 1215

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/net-dev/attachments/20250305/37a58370/attachment.htm>


More information about the net-dev mailing list