BytesWritable causes OOME when array size reaches Integer.MAX_VALUE. (#393)

This commit is contained in:
Joseph Smith 2020-05-12 13:50:35 -05:00 committed by GitHub
parent b214bbd2d9
commit d60496e6c6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -38,6 +38,7 @@
@InterfaceStability.Stable
public class BytesWritable extends BinaryComparable
implements WritableComparable<BinaryComparable> {
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 int getSize() {
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;