BytesWritable causes OOME when array size reaches Integer.MAX_VALUE. (#393)
This commit is contained in:
parent
b214bbd2d9
commit
d60496e6c6
|
@ -38,6 +38,7 @@ import org.apache.hadoop.classification.InterfaceStability;
|
|||
@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 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;
|
||||
|
|
Loading…
Reference in New Issue