This is an automated email from the ASF dual-hosted git repository.

gangwu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/parquet-java.git


The following commit(s) were added to refs/heads/master by this push:
     new d639b064c MINOR: Reader fails fast when footer size is larger than 
INT_MAX (#3136)
d639b064c is described below

commit d639b064c596f268808b443be65439fab7c9086c
Author: Xianyang Liu <[email protected]>
AuthorDate: Wed Mar 5 10:03:04 2025 +0800

    MINOR: Reader fails fast when footer size is larger than INT_MAX (#3136)
---
 .../src/main/java/org/apache/parquet/hadoop/ParquetFileReader.java | 7 ++++++-
 .../src/main/java/org/apache/parquet/hadoop/ParquetFileWriter.java | 4 ++--
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git 
a/parquet-hadoop/src/main/java/org/apache/parquet/hadoop/ParquetFileReader.java 
b/parquet-hadoop/src/main/java/org/apache/parquet/hadoop/ParquetFileReader.java
index 785f145b2..8ac9898b9 100644
--- 
a/parquet-hadoop/src/main/java/org/apache/parquet/hadoop/ParquetFileReader.java
+++ 
b/parquet-hadoop/src/main/java/org/apache/parquet/hadoop/ParquetFileReader.java
@@ -589,7 +589,12 @@ public class ParquetFileReader implements Closeable {
     long fileMetadataLengthIndex = fileLen - magic.length - FOOTER_LENGTH_SIZE;
     LOG.debug("reading footer index at {}", fileMetadataLengthIndex);
     f.seek(fileMetadataLengthIndex);
-    int fileMetadataLength = readIntLittleEndian(f);
+    long readFileMetadataLength = readIntLittleEndian(f) & 0xFFFFFFFFL;
+    if (readFileMetadataLength > Integer.MAX_VALUE) {
+      throw new RuntimeException("footer is too large: " + 
readFileMetadataLength + "to be read");
+    }
+    int fileMetadataLength = (int) readFileMetadataLength;
+
     f.readFully(magic);
 
     boolean encryptedFooterMode;
diff --git 
a/parquet-hadoop/src/main/java/org/apache/parquet/hadoop/ParquetFileWriter.java 
b/parquet-hadoop/src/main/java/org/apache/parquet/hadoop/ParquetFileWriter.java
index 9b2f7f445..02efcc8b5 100644
--- 
a/parquet-hadoop/src/main/java/org/apache/parquet/hadoop/ParquetFileWriter.java
+++ 
b/parquet-hadoop/src/main/java/org/apache/parquet/hadoop/ParquetFileWriter.java
@@ -2063,7 +2063,7 @@ public class ParquetFileWriter implements AutoCloseable {
       out.write(serializedFooter);
       out.write(signature);
       LOG.debug("{}: footer and signature length = {}", out.getPos(), 
(out.getPos() - footerIndex));
-      BytesUtils.writeIntLittleEndian(out, toIntWithCheck(out.getPos() - 
footerIndex, "page"));
+      BytesUtils.writeIntLittleEndian(out, toIntWithCheck(out.getPos() - 
footerIndex, "footer"));
       out.write(MAGIC);
       return;
     }
@@ -2073,7 +2073,7 @@ public class ParquetFileWriter implements AutoCloseable {
     writeFileCryptoMetaData(fileEncryptor.getFileCryptoMetaData(), out);
     byte[] footerAAD = AesCipher.createFooterAAD(fileEncryptor.getFileAAD());
     writeFileMetaData(parquetMetadata, out, 
fileEncryptor.getFooterEncryptor(), footerAAD);
-    int combinedMetaDataLength = toIntWithCheck(out.getPos() - 
cryptoFooterIndex, "page");
+    int combinedMetaDataLength = toIntWithCheck(out.getPos() - 
cryptoFooterIndex, "footer");
     LOG.debug("{}: crypto metadata and footer length = {}", out.getPos(), 
combinedMetaDataLength);
     BytesUtils.writeIntLittleEndian(out, combinedMetaDataLength);
     out.write(EFMAGIC);

Reply via email to