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)