diff -r 7e9e2f10a050 -r 2b1e684c3ce6 src/java.base/share/classes/sun/nio/ch/NioDatagramSocketImpl.java --- a/src/java.base/share/classes/sun/nio/ch/NioDatagramSocketImpl.java Thu Oct 17 21:15:33 2019 +0100 +++ b/src/java.base/share/classes/sun/nio/ch/NioDatagramSocketImpl.java Fri Oct 18 17:08:59 2019 +0100 @@ -48,6 +48,8 @@ import java.util.Objects; import java.util.Set; import java.util.concurrent.locks.ReentrantLock; +import jdk.internal.access.JavaNetDatagramPacketAccess; +import jdk.internal.access.SharedSecrets; import jdk.internal.ref.CleanerFactory; import sun.net.PlatformDatagramSocketImpl; import sun.net.ResourceManager; @@ -65,6 +67,9 @@ private static final NativeDispatcher nd = new SocketDispatcher(); + private static final JavaNetDatagramPacketAccess DATAGRAM_PACKET_ACCESS = + SharedSecrets.getJavaNetDatagramPacketAccess(); + private static final int MAX_PACKET_LEN = 65536; private static final ProtocolFamily family = family(); @@ -410,7 +415,7 @@ Objects.requireNonNull(p); byte[] b = p.getData(); int off = p.getOffset(); - int len = b.length - off; + int len = DATAGRAM_PACKET_ACCESS.getBufLengthField(p); assert len >= 0; if (len > MAX_PACKET_LEN) len = MAX_PACKET_LEN; @@ -441,7 +446,7 @@ p.setAddress(sender.getAddress()); if (p.getPort() != sender.getPort()) p.setPort(sender.getPort()); - p.setLength(n); + DATAGRAM_PACKET_ACCESS.setLengthField(p, n); } catch (IOException e) { // #### reset packet offset and length! ?? throw e;