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-mr.git


The following commit(s) were added to refs/heads/master by this push:
     new 72442b5c5 PARQUET-2164: Check size of buffered data to prevent page 
data from overflowing (#1032)
72442b5c5 is described below

commit 72442b5c5cbf4bf20258dd22432a5c39081193fc
Author: Parth Chandra <par...@apache.org>
AuthorDate: Sat Mar 11 06:06:57 2023 -0800

    PARQUET-2164: Check size of buffered data to prevent page data from 
overflowing (#1032)
    
    - Use Math.addExact to detect overflow
---
 .../org/apache/parquet/bytes/CapacityByteArrayOutputStream.java  | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git 
a/parquet-common/src/main/java/org/apache/parquet/bytes/CapacityByteArrayOutputStream.java
 
b/parquet-common/src/main/java/org/apache/parquet/bytes/CapacityByteArrayOutputStream.java
index 39b2863e9..305a28769 100644
--- 
a/parquet-common/src/main/java/org/apache/parquet/bytes/CapacityByteArrayOutputStream.java
+++ 
b/parquet-common/src/main/java/org/apache/parquet/bytes/CapacityByteArrayOutputStream.java
@@ -164,6 +164,15 @@ public class CapacityByteArrayOutputStream extends 
OutputStream {
   private void addSlab(int minimumSize) {
     int nextSlabSize;
 
+    // check for overflow 
+    try {
+      Math.addExact(bytesUsed, minimumSize);
+    } catch (ArithmeticException e) {
+      // This is interpreted as a request for a value greater than 
Integer.MAX_VALUE
+      // We throw OOM because that is what java.io.ByteArrayOutputStream also 
does
+      throw new OutOfMemoryError("Size of data exceeded Integer.MAX_VALUE (" + 
e.getMessage() + ")");
+    }
+
     if (bytesUsed == 0) {
       nextSlabSize = initialSlabSize;
     } else if (bytesUsed > maxCapacityHint / 5) {

Reply via email to