From d60496e6c6673680e3299a3f995fd9b368123e3d Mon Sep 17 00:00:00 2001 From: Joseph Smith Date: Tue, 12 May 2020 13:50:35 -0500 Subject: [PATCH] BytesWritable causes OOME when array size reaches Integer.MAX_VALUE. (#393) --- .../src/main/java/org/apache/hadoop/io/BytesWritable.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/BytesWritable.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/BytesWritable.java index a81bc24e893..c5538c9e56e 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/BytesWritable.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/BytesWritable.java @@ -38,6 +38,7 @@ import org.apache.hadoop.classification.InterfaceStability; @InterfaceStability.Stable public class BytesWritable extends BinaryComparable implements WritableComparable { + private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8; private static final int LENGTH_BYTES = 4; private static final byte[] EMPTY_BYTES = new byte[0]; @@ -126,7 +127,7 @@ public class BytesWritable extends BinaryComparable public void setSize(int size) { if (size > getCapacity()) { // Avoid overflowing the int too early by casting to a long. - long newSize = Math.min(Integer.MAX_VALUE, (3L * size) / 2L); + long newSize = Math.min(MAX_ARRAY_SIZE, (3L * size) / 2L); setCapacity((int) newSize); } this.size = size;