[
https://issues.apache.org/jira/browse/ARROW-17107?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
David Li resolved ARROW-17107.
------------------------------
Fix Version/s: 9.0.0
Resolution: Fixed
Issue resolved by pull request 13676
[https://github.com/apache/arrow/pull/13676]
> [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
> Assignee: David Li
> Priority: Minor
> Labels: pull-request-available
> Fix For: 9.0.0
>
> Time Spent: 1h
> Remaining Estimate: 0h
>
> 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)