@@ -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