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());
}