[
https://issues.apache.org/jira/browse/PARQUET-2247?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17690110#comment-17690110
]
ASF GitHub Bot commented on PARQUET-2247:
-----------------------------------------
wgtmac commented on code in PR #1031:
URL: https://github.com/apache/parquet-mr/pull/1031#discussion_r1109248942
##########
parquet-common/src/main/java/org/apache/parquet/bytes/CapacityByteArrayOutputStream.java:
##########
@@ -205,6 +206,12 @@ public void write(byte b[], int off, int len) {
throw new IndexOutOfBoundsException(
String.format("Given byte array of size %d, with requested
length(%d) and offset(%d)", b.length, len, off));
}
+ int targetBytesUsed = bytesUsed + len;
Review Comment:
Thanks for the change!
What about using `bytesUsed = Math.addExact(bytesUsed, len)`. It is
available in java8 and looks more elegant to throw ArithmeticException by
itself.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Math.html#addExact(int,int)
> Fail-fast if CapacityByteArrayOutputStream write overflow
> ---------------------------------------------------------
>
> Key: PARQUET-2247
> URL: https://issues.apache.org/jira/browse/PARQUET-2247
> Project: Parquet
> Issue Type: Bug
> Components: parquet-mr
> Reporter: dzcxzl
> Priority: Critical
>
> The bytesUsed of CapacityByteArrayOutputStream may overflow when writing some
> large byte data, resulting in parquet file write corruption.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)