diff --git a/parquet/src/file/metadata/reader.rs b/parquet/src/file/metadata/reader.rs index 2be9dcbd4b01..60c57129fd24 100644 --- a/parquet/src/file/metadata/reader.rs +++ b/parquet/src/file/metadata/reader.rs @@ -530,7 +530,13 @@ impl ParquetMetaDataReader { let remainder_start = *remainder_start as u64; let offset = usize::try_from(range.start - remainder_start)?; let end = usize::try_from(range.end - remainder_start)?; - assert!(end <= remainder.len()); + if end > remainder.len() { + return Err(general_err!( + "Corrupted parquet file: index data range ({:?}) exceeds remainder length ({})", + range, + remainder.len() + )); + } remainder.slice(offset..end) } // Note: this will potentially fetch data already in remainder, this keeps things simple @@ -538,7 +544,13 @@ impl ParquetMetaDataReader { }; // Sanity check - assert_eq!(bytes.len() as u64, range.end - range.start); + if bytes.len() as u64 != range.end - range.start { + return Err(general_err!( + "Corrupted parquet file: index data length mismatch, expected {}, got {}", + range.end - range.start, + bytes.len() + )); + } push_decoder.push_range(range.clone(), bytes)?; let metadata = parse_index_data(&mut push_decoder)?; self.metadata = Some(metadata);