diff --git a/parquet/src/encodings/decoding.rs b/parquet/src/encodings/decoding.rs index 8201b38753c6..1f81c67dab3b 100644 --- a/parquet/src/encodings/decoding.rs +++ b/parquet/src/encodings/decoding.rs @@ -681,6 +681,10 @@ where .try_into() .map_err(|_| general_err!("invalid 'mini_blocks_per_block'"))?; + if self.mini_blocks_per_block == 0 { + return Err(general_err!("cannot have zero miniblocks per block")); + } + self.values_left = self .bit_reader .get_vlq_int() @@ -1688,6 +1692,21 @@ mod tests { test_delta_bit_packed_decode::(data); } + #[test] + fn test_delta_bit_packed_zero_miniblocks() { + // It is invalid for mini_blocks_per_block to be 0 + let data = vec![ + 128, 1, // block_size = 128 + 0, // mini_blocks_per_block = 0 + ]; + let mut decoder = DeltaBitPackDecoder::::new(); + let err = decoder.set_data(data.into(), 0).unwrap_err(); + assert_eq!( + err.to_string(), + "Parquet error: cannot have zero miniblocks per block" + ); + } + #[test] fn test_delta_bit_packed_decoder_sample() { let data_bytes = vec![