From daa958c173369c03d43aee9539ca3f9a40e0ba43 Mon Sep 17 00:00:00 2001 From: abdul rawoof Date: Mon, 20 Jul 2026 14:42:08 +0530 Subject: [PATCH] fix out-of-slice read in ArrowFlightJdbcArray.checkBoundaries --- .../arrow/driver/jdbc/ArrowFlightJdbcArray.java | 2 +- .../driver/jdbc/ArrowFlightJdbcArrayTest.java | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/flight/flight-sql-jdbc-core/src/main/java/org/apache/arrow/driver/jdbc/ArrowFlightJdbcArray.java b/flight/flight-sql-jdbc-core/src/main/java/org/apache/arrow/driver/jdbc/ArrowFlightJdbcArray.java index f3d76ace92..b916f78b13 100644 --- a/flight/flight-sql-jdbc-core/src/main/java/org/apache/arrow/driver/jdbc/ArrowFlightJdbcArray.java +++ b/flight/flight-sql-jdbc-core/src/main/java/org/apache/arrow/driver/jdbc/ArrowFlightJdbcArray.java @@ -90,7 +90,7 @@ public Object getArray(long index, int count) throws SQLException { } private void checkBoundaries(long index, int count) { - if (index < 0 || index + count > this.startOffset + this.valuesCount) { + if (index < 0 || index + count > this.valuesCount) { throw new ArrayIndexOutOfBoundsException(); } } diff --git a/flight/flight-sql-jdbc-core/src/test/java/org/apache/arrow/driver/jdbc/ArrowFlightJdbcArrayTest.java b/flight/flight-sql-jdbc-core/src/test/java/org/apache/arrow/driver/jdbc/ArrowFlightJdbcArrayTest.java index cb6abacb2f..090a026b83 100644 --- a/flight/flight-sql-jdbc-core/src/test/java/org/apache/arrow/driver/jdbc/ArrowFlightJdbcArrayTest.java +++ b/flight/flight-sql-jdbc-core/src/test/java/org/apache/arrow/driver/jdbc/ArrowFlightJdbcArrayTest.java @@ -105,6 +105,20 @@ public void testShouldGetArrayWithOffsetsThrowArrayIndexOutOfBoundsException() () -> arrowFlightJdbcArray.getArray(0, dataVector.getValueCount() + 1)); } + @Test + public void testShouldGetArrayWithOffsetsNotReadPastEndOfSlice() throws SQLException { + // Array covering elements 5, 6 and 7 of the underlying vector. + ArrowFlightJdbcArray arrowFlightJdbcArray = new ArrowFlightJdbcArray(dataVector, 5, 3); + assertThrows(ArrayIndexOutOfBoundsException.class, () -> arrowFlightJdbcArray.getArray(1, 3)); + } + + @Test + public void testShouldGetResultSetWithOffsetsNotReadPastEndOfSlice() throws SQLException { + ArrowFlightJdbcArray arrowFlightJdbcArray = new ArrowFlightJdbcArray(dataVector, 5, 3); + assertThrows( + ArrayIndexOutOfBoundsException.class, () -> arrowFlightJdbcArray.getResultSet(1, 3)); + } + @Test public void testShouldGetArrayWithMapNotBeSupported() throws SQLException { ArrowFlightJdbcArray arrowFlightJdbcArray =