Uploaded image for project: 'Infinispan'
  1. Infinispan
  2. ISPN-13438

BytesObjectOutput does not handle overflow correctly

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • Major
    • 14.0.0.Dev01
    • 13.0.1.Final
    • Core, Marshalling
    • 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)
      

      Attachments

        Activity

          People

            dberinde@redhat.com Dan Berindei (Inactive)
            dberinde@redhat.com Dan Berindei (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: