James Henderson created ARROW-17107:
---------------------------------------

             Summary: [Java] JSONFileWriter throws IOOBE writing an empty list
                 Key: ARROW-17107
                 URL: https://issues.apache.org/jira/browse/ARROW-17107
             Project: Apache Arrow
          Issue Type: Bug
          Components: Java
    Affects Versions: 8.0.0
            Reporter: James Henderson


Hey folks,

I'm trying to write an empty ListVector out through the `JsonFileWriter`, and 
am getting an IOOBE. Stack trace is as follows:

 

```

java.lang.IndexOutOfBoundsException: index: 0, length: 4 (expected: range(0, 0))
 at org.apache.arrow.memory.ArrowBuf.checkIndexD (ArrowBuf.java:318)
    org.apache.arrow.memory.ArrowBuf.chk (ArrowBuf.java:305)
    org.apache.arrow.memory.ArrowBuf.getInt (ArrowBuf.java:424)
    org.apache.arrow.vector.ipc.JsonFileWriter.writeValueToGenerator 
(JsonFileWriter.java:270)
    org.apache.arrow.vector.ipc.JsonFileWriter.writeFromVectorIntoJson 
(JsonFileWriter.java:237)
    org.apache.arrow.vector.ipc.JsonFileWriter.writeFromVectorIntoJson 
(JsonFileWriter.java:253)
    org.apache.arrow.vector.ipc.JsonFileWriter.writeFromVectorIntoJson 
(JsonFileWriter.java:253)
    org.apache.arrow.vector.ipc.JsonFileWriter.writeFromVectorIntoJson 
(JsonFileWriter.java:253)
    org.apache.arrow.vector.ipc.JsonFileWriter.writeBatch 
(JsonFileWriter.java:200)
    org.apache.arrow.vector.ipc.JsonFileWriter.write (JsonFileWriter.java:190)

```

It's trying to write the offset buffer of the list, which is empty. L224 of 
JFW.java sets `bufferValueCount` to 1 (because we're not a DUV), so we enter 
the `for` loop. We don't hit the `valueCount=0` condition in L230 (because 
we're not a varbinary or a varchar vector). So we fall into the `else`, which 
tries to write the 0th element in the offset vector, and IOOBE.

Could we include 'list' in either the L224 or the L230 checks?

Admittedly, I'm not aware of the history of this section, but it seems that, by 
the time we hit L230 (i.e. excluding DUV), any empty vector should yield a 
single 0?

Let me know if there's any more info I can provide!

Cheers,

James



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to