DTLSReassembler can queue fragments of the same handshake message with 
different total messageLength values. Reassembly holes are initialized from the 
first fragment, while the output array is allocated using the fragment with the 
lowest offset.

For the same epoch, message sequence, and HELLO_REQUEST type, submit these 
fragments in order:
offset 5, length 50, total message length 100;
offset 0, length 5, total message length 10;
offset 55, length 45, total message length 100.

The final fragment completes the holes, but copying the buffered fragments into 
the array sized for a ten-byte message triggers ArrayIndexOutOfBoundsException. 
SSLEngineImpl catches this runtime exception and reports a fatal SSLException; 
it does not establish a JVM crash.

Expected behavior the inconsistent handshake metadata must be rejected as a 
protocol error before fragment reassembly.

---------
- [x] I confirm that I make this contribution in accordance with the [OpenJDK 
Interim AI Policy](https://openjdk.org/legal/ai).

-------------

Commit messages:
 - 8396112: DTLS handshake reassembly does not reject inconsistent message 
lengths across fragments

Changes: https://git.openjdk.org/jdk/pull/33633/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=33633&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8396112
  Stats: 12 lines in 1 file changed: 12 ins; 0 del; 0 mod
  Patch: https://git.openjdk.org/jdk/pull/33633.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/33633/head:pull/33633

PR: https://git.openjdk.org/jdk/pull/33633

Reply via email to