Details
-
Bug
-
Resolution: Done
-
Major
-
13.0.1.Final
-
None
Description
Marshalling an object > 2GB should fail with an OutOfMemoryError, as the marshalled form must fit into a byte array and Java arrays are limited to (almost) 2^13. Instead, because BytesObjectOutput does not handle overflow, marshalling fails with a confusing ArrayIndexOutOfBoundsException.
java.lang.ArrayIndexOutOfBoundsException: arraycopy: last destination index 2306868350 out of bounds for byte[2097153050] at java.base/java.lang.System.arraycopy(Native Method) at org.infinispan.marshall.core.BytesObjectOutput.write(BytesObjectOutput.java:38) at org.infinispan.marshall.core.GlobalMarshaller.writeRawUnknown(GlobalMarshaller.java:639) at org.infinispan.marshall.core.GlobalMarshaller.writeUnknown(GlobalMarshaller.java:626) at org.infinispan.marshall.core.GlobalMarshaller.writeUnknown(GlobalMarshaller.java:617) at org.infinispan.marshall.core.GlobalMarshaller.writeNonNullableObject(GlobalMarshaller.java:383) at org.infinispan.marshall.core.GlobalMarshaller.writeNullableObject(GlobalMarshaller.java:351) at org.infinispan.marshall.core.BytesObjectOutput.writeObject(BytesObjectOutput.java:26) at org.infinispan.commons.marshall.MarshallUtil.marshallCollection(MarshallUtil.java:252) at org.infinispan.commons.marshall.MarshallUtil.marshallCollection(MarshallUtil.java:230) at org.infinispan.marshall.exts.CollectionExternalizer.writeObject(CollectionExternalizer.java:76) at org.infinispan.marshall.exts.CollectionExternalizer.writeObject(CollectionExternalizer.java:28) at org.infinispan.marshall.core.GlobalMarshaller.writeInternal(GlobalMarshaller.java:655) at org.infinispan.marshall.core.GlobalMarshaller.writeNonNullableObject(GlobalMarshaller.java:370) at org.infinispan.marshall.core.GlobalMarshaller.writeNullableObject(GlobalMarshaller.java:351) at org.infinispan.marshall.core.GlobalMarshaller.writeObjectOutput(GlobalMarshaller.java:180) at org.infinispan.marshall.core.GlobalMarshaller.writeObjectOutput(GlobalMarshaller.java:173) at org.infinispan.marshall.core.GlobalMarshaller.objectToByteBuffer(GlobalMarshaller.java:163)