diff -r 7e9e2f10a050 -r 2b1e684c3ce6 src/java.base/share/classes/java/net/DatagramPacket.java --- a/src/java.base/share/classes/java/net/DatagramPacket.java Thu Oct 17 21:15:33 2019 +0100 +++ b/src/java.base/share/classes/java/net/DatagramPacket.java Fri Oct 18 17:08:59 2019 +0100 @@ -25,6 +25,9 @@ package java.net; +import jdk.internal.access.JavaNetDatagramPacketAccess; +import jdk.internal.access.SharedSecrets; + /** * This class represents a datagram packet. *

@@ -367,12 +370,36 @@ * @since 1.1 */ public synchronized void setLength(int length) { + setLengthField(length); + this.bufLength = this.length; + } + + private synchronized void setLengthField(int length) { if ((length + offset) > buf.length || length < 0 || - (length + offset) < 0) { + (length + offset) < 0) { throw new IllegalArgumentException("illegal length"); } this.length = length; - this.bufLength = this.length; + } + + private synchronized int getBufLength() { + return bufLength; + } + + static { + SharedSecrets.setJavaNetDatagrtamPacketAccess( + new JavaNetDatagramPacketAccess() { + @Override + public int getBufLengthField(DatagramPacket packet) { + return packet.getBufLength(); + } + + @Override + public void setLengthField(DatagramPacket packet, int length) { + packet.setLengthField(length); + } + } + ); } /**