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

wgtmac 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 4b37c193e GH-3587: Test Util -1 max message size sentinel (#3800)
4b37c193e is described below

commit 4b37c193e2f796d553a20cc57ec9835ceaa1c95c
Author: Sankalp Thakur <[email protected]>
AuthorDate: Thu Sep 24 13:50:45 2026 +0400

    GH-3587: Test Util -1 max message size sentinel (#3800)
    
    The validation fix is already on master; GitHub issue 3587 stayed open
    because #3588 used Closes #GH-3587. Cover the -1 default at the Util
    read path and document the public sentinel.
    
    Co-authored-by: Cursor Agent <[email protected]>
    Co-authored-by: Sankalp Thakur <[email protected]>
---
 .../main/java/org/apache/parquet/format/Util.java  |  8 ++++++
 .../java/org/apache/parquet/format/TestUtil.java   | 30 ++++++++++++++++++++++
 2 files changed, 38 insertions(+)

diff --git 
a/parquet-format-structures/src/main/java/org/apache/parquet/format/Util.java 
b/parquet-format-structures/src/main/java/org/apache/parquet/format/Util.java
index 419d75770..6e50d7ed0 100644
--- 
a/parquet-format-structures/src/main/java/org/apache/parquet/format/Util.java
+++ 
b/parquet-format-structures/src/main/java/org/apache/parquet/format/Util.java
@@ -158,6 +158,14 @@ public class Util {
     return read(from, new FileMetaData(), decryptor, AAD);
   }
 
+  /**
+   * Reads file metadata using a custom Thrift max message size.
+   *
+   * @param from the stream to read the metadata from
+   * @param maxMessageSize maximum Thrift message size in bytes; {@code -1} 
uses the default (100 MB)
+   * @return the resulting metadata
+   * @throws IOException if any I/O error occurs during the reading
+   */
   public static FileMetaData readFileMetaData(InputStream from, int 
maxMessageSize) throws IOException {
     return readFileMetaData(from, null, null, maxMessageSize);
   }
diff --git 
a/parquet-format-structures/src/test/java/org/apache/parquet/format/TestUtil.java
 
b/parquet-format-structures/src/test/java/org/apache/parquet/format/TestUtil.java
index d78023d9e..179fcf633 100644
--- 
a/parquet-format-structures/src/test/java/org/apache/parquet/format/TestUtil.java
+++ 
b/parquet-format-structures/src/test/java/org/apache/parquet/format/TestUtil.java
@@ -70,6 +70,36 @@ public class TestUtil {
         .hasMessageContaining("Compressed page size");
   }
 
+  @Test
+  public void testReadFileMetaDataAcceptsMinusOneAsDefaultMaxMessageSize() 
throws Exception {
+    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    FileMetaData md = sampleFileMetaData();
+    writeFileMetaData(md, baos);
+
+    assertThat(readFileMetaData(in(baos), -1)).isEqualTo(md);
+  }
+
+  @Test
+  public void testReadFileMetaDataRejectsZeroMaxMessageSize() {
+    assertRejectsNonPositiveMaxMessageSize(0);
+  }
+
+  @Test
+  public void testReadFileMetaDataRejectsInvalidNegativeMaxMessageSize() {
+    assertRejectsNonPositiveMaxMessageSize(-5);
+  }
+
+  private static FileMetaData sampleFileMetaData() {
+    return new FileMetaData(
+        1, asList(new SchemaElement("foo")), 10, asList(new 
RowGroup(asList(new ColumnChunk(0)), 10, 5)));
+  }
+
+  private static void assertRejectsNonPositiveMaxMessageSize(int 
maxMessageSize) {
+    assertThatThrownBy(() -> readFileMetaData(new ByteArrayInputStream(new 
byte[0]), maxMessageSize))
+        .isInstanceOf(NumberFormatException.class)
+        .hasMessage("Max message size must be positive: " + maxMessageSize);
+  }
+
   private ByteArrayInputStream in(ByteArrayOutputStream baos) {
     return new ByteArrayInputStream(baos.toByteArray());
   }

Reply via email to