This is an automated email from the ASF dual-hosted git repository.

alamb pushed a commit to branch alamb/backport_9813
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git

commit 5ba59e3842d92532a7558c40b04bba6cbbc16806
Merge: cab800615e 1e7097ff91
Author: Andrew Lamb <[email protected]>
AuthorDate: Wed May 6 12:52:14 2026 -0400

    Merge remote-tracking branch 'apache/56_maintenance' into 
alamb/backport_9813

 arrow-array/src/array/fixed_size_binary_array.rs | 122 +++++++++++++++++---
 arrow-buffer/src/buffer/mutable.rs               |  95 +++++++++++++++-
 arrow-buffer/src/builder/mod.rs                  |  24 ++++
 arrow-buffer/src/util/bit_chunk_iterator.rs      |  10 +-
 arrow-data/src/data.rs                           | 137 ++++++++++++++++++++---
 arrow-row/src/lib.rs                             |  19 +++-
 6 files changed, 369 insertions(+), 38 deletions(-)

diff --cc arrow-data/src/data.rs
index 302ee12f3f,c8202f5641..10770d39cb
--- a/arrow-data/src/data.rs
+++ b/arrow-data/src/data.rs
@@@ -2261,19 -2285,86 +2288,99 @@@ mod tests 
          assert_eq!(data.null_count() - 1, new_data.null_count());
      }
  
 +    #[test]
 +    #[should_panic(expected = "offset + length overflow")]
 +    fn test_slice_panics_on_offset_length_overflow() {
 +        let data = ArrayData::builder(DataType::Int32)
 +            .len(4)
 +            .add_buffer(make_i32_buffer(4))
 +            .build()
 +            .unwrap();
 +        let sliced = data.slice(1, 3);
 +
 +        sliced.slice(1, usize::MAX);
 +    }
 +
+     #[test]
+     fn test_typed_offsets_length_overflow() {
+         let data = ArrayData {
+             data_type: DataType::Binary,
+             len: usize::MAX,
+             offset: 0,
+             buffers: vec![Buffer::from_slice_ref([0_i32])],
+             child_data: vec![],
+             nulls: None,
+         };
+         let err = data.typed_offsets::<i32>().unwrap_err();
+ 
+         assert_eq!(
+             err.to_string(),
+             format!(
+                 "Invalid argument error: Length {} with offset 1 overflows 
usize for Binary",
+                 usize::MAX
+             )
+         );
+     }
+ 
+     #[test]
+     fn test_validate_typed_buffer_length_overflow() {
+         let data = ArrayData {
+             data_type: DataType::Binary,
+             len: 0,
+             offset: 2,
+             buffers: vec![Buffer::from_slice_ref([0_i32])],
+             child_data: vec![],
+             nulls: None,
+         };
+         let err = data.typed_buffer::<i32>(0, usize::MAX).unwrap_err();
+ 
+         assert_eq!(
+             err.to_string(),
+             format!(
+                 "Invalid argument error: Length {} with offset 2 overflows 
usize for Binary",
+                 usize::MAX
+             )
+         );
+     }
+ 
+     // Exercises ArrayData::try_new with len + offset overflowing
+     fn try_new_binary_length_offset_overflow() -> Result<ArrayData, 
ArrowError> {
+         ArrayData::try_new(
+             DataType::Binary,
+             usize::MAX,
+             None,
+             1,
+             vec![
+                 Buffer::from_slice_ref([0_i32]),
+                 Buffer::from_iter(std::iter::empty::<u8>()),
+             ],
+             vec![],
+         )
+     }
+ 
+     #[cfg(not(feature = "force_validate"))]
+     #[test]
+     fn test_try_new_length_offset_overflow() {
+         let err = try_new_binary_length_offset_overflow().unwrap_err();
+ 
+         assert_eq!(
+             err.to_string(),
+             format!(
+                 "Invalid argument error: Length {} with offset 1 overflows 
usize for Binary",
+                 usize::MAX
+             )
+         );
+     }
+ 
+     #[cfg(feature = "force_validate")]
+     #[test]
+     #[should_panic(
+         expected = "Length 18446744073709551615 with offset 1 overflows usize 
for Binary"
+     )]
+     fn test_try_new_length_offset_overflow_force_validate() {
+         try_new_binary_length_offset_overflow().unwrap();
+     }
+ 
      #[test]
      fn test_equality() {
          let int_data = ArrayData::builder(DataType::Int32)

Reply via email to