@@ -25,7 +25,7 @@ use crate::compression::{Codec, create_codec};
2525#[ cfg( feature = "encryption" ) ]
2626use crate :: encryption:: decrypt:: { CryptoContext , read_and_decrypt} ;
2727use crate :: errors:: { ParquetError , Result } ;
28- use crate :: file:: metadata:: thrift:: PageHeader ;
28+ use crate :: file:: metadata:: thrift:: { DataPageHeaderV2 , PageHeader } ;
2929use crate :: file:: page_index:: offset_index:: { OffsetIndexMetaData , PageLocation } ;
3030use crate :: file:: statistics;
3131use crate :: file:: {
@@ -1145,10 +1145,7 @@ mod tests {
11451145
11461146 use super :: * ;
11471147
1148- #[ test]
11491148 fn test_decode_page_invalid_offset ( ) {
1150- use crate :: file:: metadata:: thrift_gen:: DataPageHeaderV2 ;
1151-
11521149 let page_header = PageHeader {
11531150 r#type : PageType :: DATA_PAGE_V2 ,
11541151 uncompressed_page_size : 10 ,
@@ -1171,19 +1168,45 @@ mod tests {
11711168
11721169 let buffer = Bytes :: new ( ) ;
11731170 let err = decode_page ( page_header, buffer, Type :: INT32 , None ) . unwrap_err ( ) ;
1174- assert_eq ! ( err. to_string( ) , "Parquet error: Invalid page header" ) ;
1171+ assert ! (
1172+ err. to_string( )
1173+ . contains( "DataPage v2 header contains implausible values" )
1174+ ) ;
11751175 }
11761176
1177- #[ test]
11781177 fn test_decode_unsupported_page ( ) {
1179- let mut page_header = PageHeader :: default ( ) ;
1180- page_header. r#type = PageType :: INDEX_PAGE ;
1178+ let mut page_header = PageHeader {
1179+ r#type : PageType :: INDEX_PAGE ,
1180+ uncompressed_page_size : 10 ,
1181+ compressed_page_size : 10 ,
1182+ data_page_header : None ,
1183+ index_page_header : None ,
1184+ dictionary_page_header : None ,
1185+ crc : None ,
1186+ data_page_header_v2 : None ,
1187+ } ;
11811188 let buffer = Bytes :: new ( ) ;
1182- let err = decode_page ( page_header, buffer, Type :: INT32 , None ) . unwrap_err ( ) ;
1189+ let err = decode_page ( page_header. clone ( ) , buffer. clone ( ) , Type :: INT32 , None ) . unwrap_err ( ) ;
11831190 assert_eq ! (
11841191 err. to_string( ) ,
11851192 "Parquet error: Page type INDEX_PAGE is not supported"
11861193 ) ;
1194+
1195+ page_header. data_page_header_v2 = Some ( DataPageHeaderV2 {
1196+ num_nulls : 0 ,
1197+ num_rows : 0 ,
1198+ num_values : 0 ,
1199+ encoding : Encoding :: PLAIN ,
1200+ definition_levels_byte_length : 11 ,
1201+ repetition_levels_byte_length : 0 ,
1202+ is_compressed : None ,
1203+ statistics : None ,
1204+ } ) ;
1205+ let err = decode_page ( page_header, buffer, Type :: INT32 , None ) . unwrap_err ( ) ;
1206+ assert ! (
1207+ err. to_string( )
1208+ . contains( "DataPage v2 header contains implausible values" )
1209+ ) ;
11871210 }
11881211
11891212 #[ test]
0 commit comments