3737import parquet .schema .Type .Repetition ;
3838import parquet .schema .Types ;
3939
40+ import java .io .BufferedInputStream ;
4041import java .io .EOFException ;
4142import java .io .IOException ;
4243import java .io .InputStream ;
@@ -85,10 +86,11 @@ public static ParquetMetadata readFooter(FSDataInputStream inputStream, Path fil
8586 long metadataLengthIndex = fileSize - PARQUET_METADATA_LENGTH - MAGIC .length ;
8687
8788 inputStream .seek (metadataLengthIndex );
88- int metadataLength = readIntLittleEndian (inputStream );
89+ InputStream in = new BufferedInputStream (inputStream , PARQUET_METADATA_LENGTH + MAGIC .length );
90+ int metadataLength = readIntLittleEndian (in );
8991
9092 byte [] magic = new byte [MAGIC .length ];
91- inputStream . readFully (magic );
93+ validateParquet ( in . read (magic ) == magic . length , "No enough data for MAGIC" );
9294 validateParquet (Arrays .equals (MAGIC , magic ), "Not valid Parquet file: %s expected magic number: %s got: %s" , file , Arrays .toString (MAGIC ), Arrays .toString (magic ));
9395
9496 long metadataIndex = metadataLengthIndex - metadataLength ;
@@ -98,7 +100,7 @@ public static ParquetMetadata readFooter(FSDataInputStream inputStream, Path fil
98100 file ,
99101 metadataIndex );
100102 inputStream .seek (metadataIndex );
101- FileMetaData fileMetaData = readFileMetaData (inputStream );
103+ FileMetaData fileMetaData = readFileMetaData (new BufferedInputStream ( inputStream , metadataLength ) );
102104 List <SchemaElement > schema = fileMetaData .getSchema ();
103105 validateParquet (!schema .isEmpty (), "Empty Parquet schema in file: %s" , file );
104106
0 commit comments