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

Fokko 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 dc3f1ac73 GH-3587: Fix `parquet.thrift.string.size.limit` validation 
(#3588)
dc3f1ac73 is described below

commit dc3f1ac73f7ec07a8bf354af22e5ae3b68f0354f
Author: Divjot Arora <[email protected]>
AuthorDate: Sat May 30 07:40:07 2026 +0200

    GH-3587: Fix `parquet.thrift.string.size.limit` validation (#3588)
---
 .../main/java/org/apache/parquet/format/Util.java  |  4 +-
 .../TestParquetFileReaderMaxMessageSize.java       | 48 ++++++++++++++++++++++
 2 files changed, 50 insertions(+), 2 deletions(-)

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 776fb4557..419d75770 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
@@ -417,8 +417,8 @@ public class Util {
       // Set to default 100 MB
       maxMessageSize = DEFAULT_MAX_MESSAGE_SIZE;
     }
-    if (configuredMaxMessageSize <= 0) {
-      throw new NumberFormatException("Max message size must be positive: " + 
configuredMaxMessageSize);
+    if (maxMessageSize <= 0) {
+      throw new NumberFormatException("Max message size must be positive: " + 
maxMessageSize);
     }
 
     TConfiguration config = t.getConfiguration();
diff --git 
a/parquet-hadoop/src/test/java/org/apache/parquet/hadoop/TestParquetFileReaderMaxMessageSize.java
 
b/parquet-hadoop/src/test/java/org/apache/parquet/hadoop/TestParquetFileReaderMaxMessageSize.java
index f9f121b99..7b6088e58 100644
--- 
a/parquet-hadoop/src/test/java/org/apache/parquet/hadoop/TestParquetFileReaderMaxMessageSize.java
+++ 
b/parquet-hadoop/src/test/java/org/apache/parquet/hadoop/TestParquetFileReaderMaxMessageSize.java
@@ -143,4 +143,52 @@ public class TestParquetFileReaderMaxMessageSize {
               || e.getCause().getMessage().contains("MaxMessageSize reached"));
     }
   }
+
+  /**
+   * The -1 sentinel must be honored as "use the default max message size",
+   * not rejected as a non-positive value.
+   */
+  @Test
+  public void testReadAcceptsMinusOneAsDefaultMaxMessageSize() throws 
IOException {
+    Configuration readConf = new Configuration();
+    readConf.setInt("parquet.thrift.string.size.limit", -1);
+    ParquetReadOptions options = HadoopReadOptions.builder(readConf).build();
+
+    try (ParquetFileReader reader =
+        ParquetFileReader.open(HadoopInputFile.fromPath(TEST_FILE, readConf), 
options)) {
+      ParquetMetadata metadata = reader.getFooter();
+      assertNotNull(metadata);
+      assertEquals(schema, metadata.getFileMetaData().getSchema());
+    }
+  }
+
+  @Test
+  public void testReadRejectsZeroMaxMessageSize() throws IOException {
+    assertRejectsNonPositiveMaxMessageSize(0);
+  }
+
+  @Test
+  public void testReadRejectsInvalidNegativeMaxMessageSize() throws 
IOException {
+    assertRejectsNonPositiveMaxMessageSize(-5);
+  }
+
+  private void assertRejectsNonPositiveMaxMessageSize(int maxMessageSize) 
throws IOException {
+    Configuration readConf = new Configuration();
+    readConf.setInt("parquet.thrift.string.size.limit", maxMessageSize);
+    ParquetReadOptions options = HadoopReadOptions.builder(readConf).build();
+
+    try (ParquetFileReader reader =
+        ParquetFileReader.open(HadoopInputFile.fromPath(TEST_FILE, readConf), 
options)) {
+      fail("Expected failure for non-positive max message size: " + 
maxMessageSize);
+    } catch (RuntimeException | IOException e) {
+      String message = e.getMessage() == null ? "" : e.getMessage();
+      String causeMessage = e.getCause() == null || e.getCause().getMessage() 
== null
+          ? ""
+          : e.getCause().getMessage();
+      assertTrue(
+          "Expected 'Max message size must be positive' in " + message + " / " 
+ causeMessage,
+          message.contains("Max message size must be positive")
+              || causeMessage.contains("Max message size must be positive"));
+    }
+  }
 }

Reply via email to