--- 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;