diff --git a/vortex-file/src/footer/deserializer.rs b/vortex-file/src/footer/deserializer.rs index a0f12e85c8a..7c2d6cac3d7 100644 --- a/vortex-file/src/footer/deserializer.rs +++ b/vortex-file/src/footer/deserializer.rs @@ -229,9 +229,11 @@ impl FooterDeserializer { initial_read: &[u8], segment: &PostscriptSegment, ) -> VortexResult { - let offset = usize::try_from(segment.offset - initial_offset)?; - let sliced_buffer = - FlatBuffer::copy_from(&initial_read[offset..offset + (segment.length as usize)]); + let sliced_buffer = FlatBuffer::copy_from(checked_segment_slice( + initial_read, + initial_offset, + segment, + )?); DType::from_flatbuffer(sliced_buffer, &self.session) } @@ -244,11 +246,9 @@ impl FooterDeserializer { dtype: &DType, session: &VortexSession, ) -> VortexResult { - let offset = usize::try_from(segment.offset - initial_offset)?; - let sliced_buffer = - FlatBuffer::copy_from(&initial_read[offset..offset + (segment.length as usize)]); + let sliced_buffer = checked_segment_slice(initial_read, initial_offset, segment)?; - let fb = root::(&sliced_buffer)?; + let fb = root::(sliced_buffer)?; FileStatistics::from_flatbuffer(&fb, dtype, session) } @@ -262,20 +262,119 @@ impl FooterDeserializer { dtype: DType, file_stats: Option, ) -> VortexResult