From 8e7399aa9190f8b30e3c146c8627e683659b3bf9 Mon Sep 17 00:00:00 2001 From: Alex Stephen Date: Wed, 19 Nov 2025 16:20:20 -0800 Subject: [PATCH 1/4] Add bit width check --- parquet/src/encodings/decoding.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/parquet/src/encodings/decoding.rs b/parquet/src/encodings/decoding.rs index 8201b38753c6..10ddd9869b7b 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 miniblock 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 miniblock per block" + ); + } + #[test] fn test_delta_bit_packed_decoder_sample() { let data_bytes = vec![ From 98420fb1caa73b94f64f537846ca7de7e15e6e6f Mon Sep 17 00:00:00 2001 From: Alex Stephen <1325798+rambleraptor@users.noreply.github.com> Date: Wed, 19 Nov 2025 18:27:35 -0800 Subject: [PATCH 2/4] Update parquet/src/encodings/decoding.rs Co-authored-by: Ed Seidl --- parquet/src/encodings/decoding.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parquet/src/encodings/decoding.rs b/parquet/src/encodings/decoding.rs index 10ddd9869b7b..eb20f39cd78f 100644 --- a/parquet/src/encodings/decoding.rs +++ b/parquet/src/encodings/decoding.rs @@ -682,7 +682,7 @@ where .map_err(|_| general_err!("invalid 'mini_blocks_per_block'"))?; if self.mini_blocks_per_block == 0 { - return Err(general_err!("cannot have zero miniblock per block")); + return Err(general_err!("cannot have zero miniblocks per block")); } self.values_left = self From 82d0370dc33eaae08fe4d5444ae7567b596cad3c Mon Sep 17 00:00:00 2001 From: Alex Stephen <1325798+rambleraptor@users.noreply.github.com> Date: Wed, 19 Nov 2025 18:27:40 -0800 Subject: [PATCH 3/4] Update parquet/src/encodings/decoding.rs Co-authored-by: Ed Seidl --- parquet/src/encodings/decoding.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parquet/src/encodings/decoding.rs b/parquet/src/encodings/decoding.rs index eb20f39cd78f..3355113fc664 100644 --- a/parquet/src/encodings/decoding.rs +++ b/parquet/src/encodings/decoding.rs @@ -1703,7 +1703,7 @@ mod tests { let err = decoder.set_data(data.into(), 0).unwrap_err(); assert_eq!( err.to_string(), - "Parquet error: cannot have zero miniblock per block" + "Parquet error: cannot have zero miniblocks per block" ); } From 7c72faf985b31273655b70118597bd5e1ab7a7a2 Mon Sep 17 00:00:00 2001 From: Alex Stephen Date: Wed, 19 Nov 2025 18:30:14 -0800 Subject: [PATCH 4/4] linter --- parquet/src/encodings/decoding.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parquet/src/encodings/decoding.rs b/parquet/src/encodings/decoding.rs index 3355113fc664..1f81c67dab3b 100644 --- a/parquet/src/encodings/decoding.rs +++ b/parquet/src/encodings/decoding.rs @@ -1697,7 +1697,7 @@ mod tests { // 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 + 0, // mini_blocks_per_block = 0 ]; let mut decoder = DeltaBitPackDecoder::::new(); let err = decoder.set_data(data.into(), 0).unwrap_err();