diff --git a/libs/native/src/test/java/org/elasticsearch/nativeaccess/jdk/JDKVectorLibraryFloat32Tests.java b/libs/native/src/test/java/org/elasticsearch/nativeaccess/jdk/JDKVectorLibraryFloat32Tests.java index 724a9e0610a3d..4e967bd339e5c 100644 --- a/libs/native/src/test/java/org/elasticsearch/nativeaccess/jdk/JDKVectorLibraryFloat32Tests.java +++ b/libs/native/src/test/java/org/elasticsearch/nativeaccess/jdk/JDKVectorLibraryFloat32Tests.java @@ -226,6 +226,26 @@ public void testFloat32BulkWithOffsetsHeapSegments() { assertArrayEquals(expectedScores, bulkScores, delta); } + public void testBulkIllegalDims() { + assumeTrue(notSupportedMsg(), supported()); + var segA = arena.allocate((long) size * 3 * Float.BYTES); + var segB = arena.allocate((long) size * 3 * Float.BYTES); + var segS = arena.allocate((long) size * Float.BYTES); + + Exception ex = expectThrows(IOOBE, () -> similarityBulk(segA, segB, size, 4, segS)); + assertThat(ex.getMessage(), containsString("out of bounds for length")); + + ex = expectThrows(IOOBE, () -> similarityBulk(segA, segB, size, -1, segS)); + assertThat(ex.getMessage(), containsString("out of bounds for length")); + + ex = expectThrows(IOOBE, () -> similarityBulk(segA, segB, -1, 3, segS)); + assertThat(ex.getMessage(), containsString("out of bounds for length")); + + var tooSmall = arena.allocate((long) 3 * Float.BYTES - 1); + ex = expectThrows(IOOBE, () -> similarityBulk(segA, segB, size, 3, tooSmall)); + assertThat(ex.getMessage(), containsString("out of bounds for length")); + } + public void testIllegalDims() { assumeTrue(notSupportedMsg(), supported()); var segment = arena.allocate((long) size * 3 * Float.BYTES); diff --git a/libs/native/src/test/java/org/elasticsearch/nativeaccess/jdk/JDKVectorLibraryInt8Tests.java b/libs/native/src/test/java/org/elasticsearch/nativeaccess/jdk/JDKVectorLibraryInt8Tests.java index f722c3c7dc1f4..93c64083f5956 100644 --- a/libs/native/src/test/java/org/elasticsearch/nativeaccess/jdk/JDKVectorLibraryInt8Tests.java +++ b/libs/native/src/test/java/org/elasticsearch/nativeaccess/jdk/JDKVectorLibraryInt8Tests.java @@ -197,6 +197,26 @@ public void testByteBulkWithOffsetsHeapSegments() { assertArrayEquals(expectedScores, bulkScores, delta); } + public void testBulkIllegalDims() { + assumeTrue(notSupportedMsg(), supported()); + var segA = arena.allocate((long) size * 3); + var segB = arena.allocate((long) size * 3); + var segS = arena.allocate((long) size * Float.BYTES); + + Exception ex = expectThrows(IOOBE, () -> similarityBulk(segA, segB, size, 4, segS)); + assertThat(ex.getMessage(), containsString("out of bounds for length")); + + ex = expectThrows(IOOBE, () -> similarityBulk(segA, segB, size, -1, segS)); + assertThat(ex.getMessage(), containsString("out of bounds for length")); + + ex = expectThrows(IOOBE, () -> similarityBulk(segA, segB, -1, 3, segS)); + assertThat(ex.getMessage(), containsString("out of bounds for length")); + + var tooSmall = arena.allocate((long) 3 * Float.BYTES - 1); + ex = expectThrows(IOOBE, () -> similarityBulk(segA, segB, size, 3, tooSmall)); + assertThat(ex.getMessage(), containsString("out of bounds for length")); + } + public void testIllegalDims() { assumeTrue(notSupportedMsg(), supported()); var segment = arena.allocate((long) size * 3);