--- old/src/java.base/share/classes/java/lang/invoke/X-VarHandleByteArrayView.java.template 2019-12-09 18:15:05.427561842 +0000 +++ new/src/java.base/share/classes/java/lang/invoke/X-VarHandleByteArrayView.java.template 2019-12-09 18:15:04.943553272 +0000 @@ -24,6 +24,8 @@ */ package java.lang.invoke; +import jdk.internal.access.JavaNioAccess; +import jdk.internal.access.SharedSecrets; import jdk.internal.misc.Unsafe; import jdk.internal.util.Preconditions; import jdk.internal.vm.annotation.ForceInline; @@ -38,6 +40,8 @@ final class VarHandleByteArrayAs$Type$s extends VarHandleByteArrayBase { + static JavaNioAccess nioAccess = SharedSecrets.getJavaNioAccess(); + static final int ALIGN = $BoxType$.BYTES - 1; #if[floatingPoint] @@ -529,6 +533,7 @@ @ForceInline static int index(ByteBuffer bb, int index) { + nioAccess.checkSegment(bb); return Preconditions.checkIndex(index, UNSAFE.getInt(bb, BUFFER_LIMIT) - ALIGN, null); } @@ -536,7 +541,7 @@ static int indexRO(ByteBuffer bb, int index) { if (UNSAFE.getBoolean(bb, BYTE_BUFFER_IS_READ_ONLY)) throw new ReadOnlyBufferException(); - return Preconditions.checkIndex(index, UNSAFE.getInt(bb, BUFFER_LIMIT) - ALIGN, null); + return index(bb, index); } @ForceInline